我有一个名为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)
您正在正确测试。如果要使用空对象,则该对象将不匹配。如果您使用具有不同符号的对象,则该对象将不匹配。