У меня странная проблема с моими тестами. У меня есть набор, который запускает пару асинхронных it
с. Это выглядит так:
const successData = {
...defaultAnswer,
status: 200,
data: {
"address": "Address",
"date": "Date & time",
},
};
const failData = {
...defaultAnswer,
status: 500,
data: {},
};
jest.mock("axios");
describe("Redux translate tests", () => {
beforeEach(() => {
store = makeStore();
dispatch = store.dispatch;
});
it("should properly fetch translations", async () => {
mockedAxios.get.mockResolvedValueOnce({ ...successData });
expect(store.getState().translations.getIn(["en", "generic"])).toBeUndefined();
await dispatch(fetchTranslations({ domain: "generic", language: "en" }));
const current = store.getState().translations;
console.log(store.getState().translations.toJS());
expect(axios.get as jest.Mock).toHaveBeenCalled();
expect(current.getIn(["en", "generic"])).toBeDefined();
expect(current.getIn(["en", "generic"]).toJS()).toMatchObject(successData.data);
});
it("should not fetch translations again", async () => {
mockedAxios.get.mockResolvedValueOnce({ ...successData });
expect(store.getState().translations.getIn(["en", "generic"])).toBeUndefined();
await dispatch(fetchTranslations({ domain: "generic", language: "en" }));
const current = store.getState().translations;
console.log(store.getState().translations.toJS());
expect(axios.get as jest.Mock).toHaveBeenCalled();
expect(current.getIn(["en", "generic"])).toBeDefined();
expect(current.getIn(["en", "generic"]).toJS()).toMatchObject(successData.data);
const secondFetch = await dispatch(fetchTranslations({ domain: "generic", language: "en" }));
console.log(secondFetch);
expect(secondFetch).toBeNull();
});
it("should dispatch failure on error", async () => {
mockedAxios.get.mockResolvedValueOnce({ ...failData });
const result = await dispatch(fetchTranslations({ domain: "generic", language: "en" }));
expect((result as any).type).toBe(FETCH_TRANSLATIONS_FAIL);
});
});
Теперь первый тест, should properly fetch translations
, работает. Два других терпят неудачу. Но когда я бегу тогда отдельно, они все работают.
Также, как вы можете видеть, в первых двух я поместил console.log
. Первый из них имеет правильные значения, второй - значения по умолчанию, точно так же, как выборка никогда не происходила. Что я могу сделать?