redux - 用 Jest 测试一个调度 2 个其他函数的 Redux 操作?
问题描述
我有一个调用 2 个函数的函数(一个 Redux 操作)。我不知道如何用 Jest 进行测试:
这是我的功能:
import doSomething from 'redux/do-something';
import doSomethingElse from 'redux/do-something-else';
export default () => async dispatch => {
await dispatch(doSomething());
dispatch(doSomethingElse());
};
这是我的测试:
import doSomething from 'redux/do-something';
import doSomethingElse from 'redux/do-something-else';
import functionToTest from 'redux/function-to-test'
describe("functionToTest", ()=>{
jest.mock('redux/do-something');
jest.mock('redux/do-something-else');
const dispatch = jest.fn();
test('my test', ()=>{
functionToTest()(dispatch);
console.log(dispatch.mock.calls); // This returns an anonymous function
console.log(doSomething) // This returns undefined
})
})
解决方案
看起来您想要模拟默认导出do-something
并do-something-else
测试它们是否由被测代码分派。
如果是这种情况,那么您可以这样做:
import functionToTest from 'redux/function-to-test'
jest.mock('redux/do-something', () =>
() => 'do something mock'
);
jest.mock('redux/do-something-else', () =>
() => 'do something else mock'
);
describe("functionToTest", () => {
test('my test', async () => { // <= async test function
const dispatch = jest.fn();
await functionToTest()(dispatch); // <= await the Promise
expect(dispatch.mock.calls[0][0]).toBe('do something mock'); // Success!
expect(dispatch.mock.calls[1][0]).toBe('do something else mock'); // Success!
});
});
细节
您可以将模块工厂函数作为第二个参数传递给jest.mock
,Jest
并将调用该函数的结果作为它在测试期间导入模块时返回的结果。
jest.mock
babel-jest
调用在代码文件中的所有其他内容之前被提升并运行。提升在测试函数中定义时无法正常工作jest.mock
,因此jest.mock
应将调用移至测试文件的顶级范围。
被测函数async
因此使用async
测试函数并await
确保Promise
它在断言之前已完成。
推荐阅读
- node.js - Express 服务器将带有文本字段的多部分表单数据发送到外部 api
- mysql - MySql 错误代码:1175。您正在使用安全更新模式 - 即使使用主键
- c# - 使用 Func 进行动态排序
, IOrderedQueryable > - python - Python Coverage 如何生成单元测试报告
- usb - Windows下USB Midi设备名称问题
- ms-access - Tableau MS_Access 未返回正确计数
- snowflake-cloud-data-platform - 从 Snowalert 到 Slack 或 AWS SNS 的 POP 警报数据
- sql - SQL-查找商店中最小产品的价格
- c++ - 是什么阻止编译器消除在每个特定上下文中未使用的数据成员?
- flutter - Dart/Flutter POST 请求和流响应