假设我有一个返回 promise 的模块。 我想模拟这个 promise 的不同结果来测试这个模块所属的功能。我这样模拟模块:
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 } }。
我已经尝试过不同的东西。首先将模拟包装在一个函数中,并将响应作为参数给出。 --> 失败,因为 mocks 不能取出范围外的变量。
我试图在测试中调用 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 documentation 中找到更多相关信息。 .
import request from '../request';
jest.mock("../request", () =>
jest.fn(() =>
Promise.resolve({
response: {
ok: true
}
})
)
);
test("MyTest", () => {
request.mockImplementationOnce(() =>
Promise.resolve({
response: {
ok: false
}
})
);
});
关于reactjs - Jest 模拟模块解析变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54392970/