[英]Mocking functions called inside then() with jest
我正在尝试测试此功能
const handleSave = () => {
const cveIds = cveList.map(item => item.id);
return setCveStatus({
status_id: parseInt(statusId),
cve: cveIds,
status_text: justification
})
.then(() => !checkboxState && setSystemCveStatus({ cve: cveIds }))
.then(updateRef);
};
它调用了我正在嘲笑的 2 个函数setCveStatus和setSystemCveStatus
const setCveStatusMock = jest.fn(parameters => new Promise(resolve => resolve(parameters)));
const setSystemCveStatusMock = jest.fn(parameters => new Promise(resolve => resolve(parameters)));
deps.setCveStatus = setCveStatusMock;
deps.setSystemCveStatus = setSystemCveStatusMock;
并测试他们叫什么
expect(setCveStatusMock).toBeCalledWith({
status_id: 3,
status_text: 'new',
cve: ['CVE-2020-0001']
});
expect(setSystemCveStatusMock).toBeCalledWith({
cve: ['CVE-2020-0001']
});
但是第二个期望失败了,即使它不应该失败。 如何模拟和测试在 .then() 中调用的函数?
优雅地解决这个问题的一种方法是使用asyncFn 。
用那个代替:
const setCveStatusMock = jest.fn(parameters => new Promise(resolve => resolve(parameters)));
// ...
expect(setSystemCveStatusMock).toBeCalledWith({
cve: ['CVE-2020-0001']
});
你可以
import asyncFn from '@asyncFn/jest';
const setCveStatusMock = asyncFn();
// ...
// Resolve the call for setCveStatusMock and await for anything that happens as a result of that.
await setCveStatusMock.resolve();
// ...
expect(setSystemCveStatusMock).toBeCalledWith({
cve: ['CVE-2020-0001']
});
免责声明:我是作者之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.