Jest + реагирующая библиотека тестирования: предупреждение об обновлении не было включено в act () - PullRequest
4 голосов
/ 15 марта 2019

Я тестирую свой компонент с библиотекой реагирования-тестирования, и тест работает хорошо. Я просто не могу избавиться от этого предупреждения, fireEvent должен был обернут в действие из коробки, но я попытался обернуть его снова, и это не помогло.

Вот мой тестовый пример.

it.only("should start file upload if file is added to the field", async () => {
    jest.useFakeTimers();
    const { getByTestId } = wrapper;
    const file = new File(["filefilefile"], "videoFile.mxf");

    const fileInput = getByTestId("drop-zone").querySelector(
      "input[type='file']"
    );

    fireEvent.change(fileInput, { target: { files: [file] } });

    act(() => {
      jest.runAllTimers();
    });

    await wait(() => {
      expect(
        initialProps.uploadItemVideoFileConnect.calledWith(file, 123)
      ).toBe(true);
    });
  });

Вот предупреждение

Warning: An update to UploadButtonGridComponent inside a test was not wrapped in act(...).

    When testing, code that causes React state updates should be wrapped into act(...):

    act(() => {
      /* fire events that update state */
    });
    /* assert on the output */

1 Ответ

2 голосов
/ 15 марта 2019

В исходном коде , fireEvent уже заключено в act().

Проблема может быть связана с этой проблемой, в которой используется асинхронная логика (например, * 1007).*) вызывает изменения состояния вне fireEvent:

https://github.com/kentcdodds/react-testing-library/issues/281

(Не видя реализации вашего компонента, трудно быть уверенным, что именно это происходит в вашем случае.)

Очевидно, что в будущем выпуске планируется включить асинхронную обработку, чтобы это не было проблемой.

...