【发布时间】:2021-11-21 02:17:06
【问题描述】:
我有这样的传奇效果,它调用 API 并在成功时分派一个动作:
export function* getThemEffect() {
try {
yield put(requestActoin());
const data: AxiosResponse<ServerResponseSchema> = yield call(getStuff);
yield put(successAction(data.data.data));
} catch (err: any) {
yield put(failureAction(err?.response?.data || null));
}
}
这是辅助函数:
export function getStuff() {
const config: AxiosRequestConfig = {
method: "GET",
url: "https://somewhere.com/api/get"
};
return axios(config);
}
这个传奇的测试服如下所示:
import * as api from "../api";
const getStuffSpy = jest.spyOn(api, "getStuff");
describe("search saga", () => {
let gen: Generator, response: any, getStuffMock: jest.Mock;
beforeEach(() => {
getStuffSpy.mockClear();
gen = getThemEffect();
getStuffMock = jest.fn();
getStuffSpy.mockImplementation(getStuffMock);
});
describe("server success response", () => {
beforeEach(() => {
response = { data: { data: ["1", "2", "3"] } };
});
it("should create correct success flow", () => {
expect(gen.next()).toEqual({
value: put(requestAction()),
done: false
});
expect(gen.next()).toEqual({
value: call(api.getStuff),
done: false
});
expect(getStuffMock).toHaveBeenCalled(); // <=== this fails
expect(gen.next(response)).toEqual({
value: put(successAction(["1", "2", "3"])),
done: false
});
expect(gen.next()).toEqual({
value: undefined,
done: true
});
});
});
}
但是,预期 getStuffMock 函数已被调用的测试失败。我怎样才能解决这个问题?我在测试库中使用 jest
【问题讨论】:
标签: reactjs testing react-redux jestjs redux-saga