Jest терпит неудачу на двух асинхронных тестах, успешно на каждом - PullRequest
0 голосов
/ 02 мая 2019

У меня странная проблема с моими тестами. У меня есть набор, который запускает пару асинхронных 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. Первый из них имеет правильные значения, второй - значения по умолчанию, точно так же, как выборка никогда не происходила. Что я могу сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...