javascript - 如何检查函数是否在反应js中被调用?
问题描述
我正在尝试test
我的服务有一个功能saveWithoutSubmit
export const saveWithoutSubmit = async (
values,
orderId,
taskId,
fseMsisdn,
updateTaskListAfterFilter
) => {
var obj = {
remarks: values.remarks,
requestedBy: localStorage.getItem("msisdn")
};
try {
const response = await sendPostRequest(`${API_TASK_URL}closeSr`, {
...obj,
saveWithoutSubmit: true
});
if (response && response.data && response.data.status.code !== "200") {
error(response.data.result.message);
} else {
console.log(response);
success(response.data.status.message);
updateTaskListAfterFilter();
}
} catch (e) {
if (e.response && e.response.data) {
console.log(e.response.data.message);
error(e.response.data.status.message);
}
}
};
我想检查success
或error
方法是否被调用?或被updateTaskListAfterFilter
称为与否?
我试过这样
https://codesandbox.io/s/ecstatic-currying-5q1b8
describe("remark service test", () => {
const fakeAxios = {
get: jest.fn(() => Promise.resolve({ data: { greeting: "hello there" } }))
};
it("save without sumit", () => {
const updateTaskListAfterFilter = () => {};
saveWithoutSubmit({}, updateTaskListAfterFilter);
expect(updateTaskListAfterFilter).toBeCalled();
});
});
你能建议我如何测试async
方法或发布请求(使用mook数据)吗?
这样我的测试用例就会通过。我想检查我是否从承诺中获得了成功,我的成功方法将被称为 else 错误
任何更新 ?..!!
更新
https://codesandbox.io/s/ecstatic-currying-5q1b8
it("save without sumit", async () => {
const sendPostRequest = jest.fn(() =>
Promise.resolve({ data: { greeting: "hello there" } })
);
const updateTaskListAfterFilter = () => {};
saveWithoutSubmit({}, updateTaskListAfterFilter);
expect(updateTaskListAfterFilter).toBeCalled();
});
it("save without sumit", async () => {
const sendPostRequest = jest.fn(() =>
Promise.resolve({ data: { greeting: "hello there" } })
);
const mockUpdateTaskListAfterFilter = jest.fn();
const updateTaskListAfterFilter = () => {};
saveWithoutSubmit({}, updateTaskListAfterFilter);
expect(updateTaskListAfterFilter).toBeCalled();
await wait(() => {
expect(mockUpdateTaskListAfterFilter).toBeCalled();
});
});
解决方案
您应该更改it("save without sumit", () => {
为it("save without sumit", async () => {
.
然后,您通常使用jest.fn()
创建一个模拟函数,将其提供给另一个函数或组件。
最后,等待调用模拟函数:
await wait(() => {
expect(mockUpdateTaskListAfterFilter).toBeCalled();
});
或者,您可以等待其他一些您知道将在调用模拟之前发生的事件,例如调用其他模拟或页面上出现的某些内容,然后检查您的模拟是否被调用。
推荐阅读
- android - 如何使用node-rsa加密node.js中的数据并解密android中的加密数据?
- complexity-theory - 计算空间复杂度
- sqlite - sqlite 的问题 - sqlite 格式错误的磁盘映像
- excel - 如何将值粘贴到一行中,但行号是动态的?
- c# - WPF 使用样式和模板扩展列表视图
- wordpress - 古腾堡块翻译
- c# - 如何在代码中处理异常时引发 aws lambda 重试?
- microsoft-graph-api - 我们如何在 Microsoft Excel Graph API 中创建没有标题的表格?
- java - 如何在 ant build 中添加(--add-modules jdk.incubator.vector)模块
- perl - 如何使用 Perl 的 Config::Simple 从配置文件中获取值?