Testing 如何测试使用';reduxapi中间件&x27;和[调用API]?

Testing 如何测试使用';reduxapi中间件&x27;和[调用API]?,testing,reactjs,redux,middleware,react-redux,Testing,Reactjs,Redux,Middleware,React Redux,我有一个名为addItemsToCollection的操作,它触发对API的调用,如下所示: import {CALL_API} from 'redux-api-middleware'; export function addItemsToCollection(collectionId, itemIds) { return {[CALL_API]: { endpoint: `/collections/${collectionId}/items`, method:

我有一个名为
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
      ]
    }
  };
}
当我尝试为正在创建的此操作编写测试时,例如:

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的空对象{},以及从ActionCreator函数返回的空对象。没有多大用处

所以我的问题是

为什么返回空对象?


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

不应计算您的预期数据,因为它是您测试的一部分:

const expectedAction =
{
  [CALL_API]: {
    endpoint: '/collections/1/items',
    method: 'POST',
    body: "[1,2,3]",
    types:
    [
      ADD_ITEMS,
      { type: ADD_ITEMS_SUCCESS },
      ADD_ITEMS_FAIL
    ]
  }
};
您最终可以模拟常量并使用原始数据


对于空对象,这可能取决于导入、模拟、测试工具。。。选项太多。

调用API是一个符号。它们在将对象传递到console.log时不会显示。如果您想查看对象中的键,可以执行
object.getOwnPropertySymbols(expectedAction)
console.log(expectedAction[CALL\u API])
,您将获得该对象。()


您正在正确地测试它。如果要使用空对象,它将不匹配。如果使用具有不同符号的对象,则该对象将不匹配。

对于存在此问题的任何人,您需要将{apimmediater}从redux api中间件添加到模拟存储中