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中间件添加到模拟存储中