我有一个名为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返回并返回空对象{}以及动作创建器函数。使用不多。
所以我的问题是,
为什么要返回空对象?
进行此测试的正确方法是什么?
答案 0 :(得分:1)
CALL_API是一个符号。将对象传递给console.log时,它们不会显示。如果您想查看对象中的密钥,可以Object.getOwnPropertySymbols(expectedAction)
或console.log(expectedAction[CALL_API])
,然后您将获得该对象。 (http://exploringjs.com/es6/ch_symbols.html)
您正在测试它。如果您要使用空对象,则不匹配。如果您使用具有不同符号的对象,则它将不匹配。
答案 1 :(得分:1)
对于遇到此问题的任何人,您需要将redux-api-middleware中的{apiMiddleware}添加到您的模拟商店。
答案 2 :(得分:0)
您的预期数据不应计算,因为它是您测试的一部分:
ListBox
您最终可以模拟常量并使用原始数据。
对于您的空对象,它可能取决于您的导入,模拟,测试工具......有太多选项。