【发布时间】:2020-06-02 20:23:15
【问题描述】:
我有一个使用 Promise.allSettled 从 API 返回多个统计对象的操作。
当我用模拟运行测试时,我得到了错误
Promise.allSettled is not a function
我有一个 get 端点来返回不同类型的统计信息。
myapi.com/get_stats/:type
我对此 API 有如下操作
const types = ['seo', 'referrers', 'clicks', 'posts', 'videos'];
const promises = [];
types.forEach(type =>
promises.push(
api().stats.getStats(type),
),
);
Promise.allSettled(promises).then(res => {
const { statData, statErrors } = mapData(res); // Data manipulation
dispatch({ type: FETCH_STATS_RESOLVED, payload: { statData, statErrors } });
});
我的测试设置
jest.mock('api-file.js', () => ({
api: () => ({
stats: {
getStats: type => {
switch (type) {
case: 'seo':
return mockSeoStats;
}
}
}
})
}));
在 beforeEach() 中
mockSeoStats.mockImplementation(() => Promise.resolve({ value: {data: myData} }));
我可以看到 Action 正在接收这些模拟值,但 Promise.allSettled 正在抱怨
我认为玩笑的模拟结构很难过
那么,我如何模拟 Promise.allSettled 以返回我期望的结果,而不是查看我的模拟函数?
【问题讨论】:
-
要获得有用的答案,请尝试将您的问题归结为基本信息,并举例说明发生的情况与您希望发生的情况。
-
promise.all工作吗? -
它在 Node 12.9 中有 been added(并且 jest 在 NodeJS 下运行)。所以你要么更新你的节点,要么为此方法提供 polyfill。
-
Promise.allSettled 正在实施中。只有在使用 Jest 进行测试时,我才会遇到问题。代码本身可以正常工作并且按预期工作。
-
我在节点 v8.9.4 中使用 ts-jest@24.2.0 和 jest@24.9.0 并且应用程序正在运行,但使用 allSettled 的代码测试失败。我刚刚将节点更新到 v12.16.1,保持 jest 和 ts-jest 版本并且测试工作正常。
标签: javascript unit-testing promise jestjs