我有一个名为addItemsToCollection的操作,它触发了对API的调用,如下所示:

import {CALL_API} from 'redux-api-middleware';

export function addItemsToCollection(collectionId, itemIds)
{
  return {[CALL_API]:
  {
      endpoint: `/collections/${collectionId}/items`,
      method: 'POST',
      body: JSON.stringify(itemIds),
      types:
      [
        ADD_ITEMS,
        { type: ADD_ITEMS_SUCCESS },
        ADD_ITEMS_FAIL
      ]
    }
  };
}

当我尝试为此创建的 Action 编写测试时,例如:
it('should create an action to add items to a collection', () =>
{
  const collectionId = 1;
  const itemIds = [1,2,3];

  const expectedAction =
  {
    [CALL_API]:
    {
      endpoint: `/collections/${collectionId}/items`,
      method: 'POST',
      body: JSON.stringify(itemIds),
      types:
      [
        ADD_ITEMS,
        { type: ADD_ITEMS_SUCCESS },
        ADD_ITEMS_FAIL
      ]
    }
  };

  expect(addItemsToCollection(collectionId, itemIds)).toEqual(expectedAction);
});

它确实通过了,但这是因为它正在返回,并且空的对象{}为ExpectedAction以及 Action 创建者函数的对象。没什么用。

所以我的问题是

为什么返回空对象?

进行此测试的正确方法是什么?

最佳答案

CALL_API是一个符号。仅将对象传递到console.log时,它们不会显示。如果您想在对象中看到键,则可以执行Object.getOwnPropertySymbols(expectedAction)console.log(expectedAction[CALL_API]),您将获得该对象。 (http://exploringjs.com/es6/ch_symbols.html)
您正在正确测试。如果要使用空对象,则该对象将不匹配。如果您使用具有不同符号的对象,则该对象将不匹配。

10-05 20:49
查看更多