reactjs - 玩笑模拟模块解析变量值
问题描述
假设我有一个返回承诺的模块。我想模拟这个承诺的不同结果来测试这个模块所在的功能。我像这样模拟模块:
jest.mock('../request', () => {
return () => new Promise((resolve, reject) => {
return resolve({
response: { ok: true }
});
});
});
我的第一个测试正在运行
test("The function resolves", () => {
const initialState = { apiData: getState("postData", {}, "ready", "POST") };
const store: any = mockStore(initialState);
return expect(
performApiRequest("postData/", {}, { data: "json" })(dispatch, () =>
store.getState()
)
).resolves.toBeUndefined();
});
现在的问题是测试另一个函数,其中解析的值应该不同,例如 {response: { ok: false } }。
我已经尝试了不同的东西。首先将模拟包装在一个函数中并将响应作为参数提供。--> 模拟失败不能超出范围变量。
我试图在测试中调用 jest.doMock 但这不会正确触发请求。
我试着做
const mockResponse = jest.fn();
jest.mock("../request", () => {
return () =>
new Promise((resolve, reject) => {
return resolve({
mockResponse
});
});
});
然后调用 mockResponse.mockReturnValueOnce(value)。
还没有成功。有人看到出路吗?
解决方案
您可以使用jest.fn
. mockImplementation
创建模拟后,您可以使用或覆盖测试用例中函数的实现mockImplementationOnce
。您可以在 Jest文档中找到有关此的更多信息。
import request from '../request';
jest.mock("../request", () =>
jest.fn(() =>
Promise.resolve({
response: {
ok: true
}
})
)
);
test("MyTest", () => {
request.mockImplementationOnce(() =>
Promise.resolve({
response: {
ok: false
}
})
);
});
推荐阅读
- openshift - 多容器 openshift pod 中的容器无法相互通信
- python - 为多维数组的每个元素添加值
- laravel - 带有 docker-compose 和 dockerfile laravel 错误的 Docker
- linux - 什么是 grub,我该如何使用它
- c# - 编译后如何正确重命名程序集?
- typescript - 有没有办法在 TypeScript 函数文档中引用参数?
- javascript - React Native - 挂钩 useState 空数组
- python-3.x - Bokeh 中 factor_cmap 中的因子是如何工作的?
- python - python discord.py 在加入公会时向邀请者发送 DM
- python - Python & 在 url 字符串中