Тестирование завершается неудачей, потому что реквизит еще не отрендерен.

Я пытаюсь написать тест, который ищет визуализированный элемент Dom, но он визуализируется с помощью useEffect, поэтому тест завершается неудачей, потому что он визуализируется немного позже. Например:

const [isTrue, setIsTrue] = useState(false);
  useEffect(() => {
        setIsTrue(!isTrue);
      }, []);

    <div>
      {isTrue && <div className="test">test</div>}
    </div>

когда дом отображает div с className="test" не отображается только после использования useEffect, но у меня есть тест под названием:

 test("test", () => {
    expect(wrapper.find(".test").first().text()).toEqual("test");
  });

и он терпит неудачу, потому что он видит только первый рендеринг, как я могу изменить тест, чтобы он увидел визуализированную публикацию div useEffect?

РЕДАКТИРОВАТЬ: я пытался использовать акт, но он все еще не работает

import { act } from "react-dom/test-utils";
  import { mount } from "enzyme";
  act(() => {
      component = mount(<App />);
    });

person Alexander    schedule 24.04.2020    source источник
comment
Вы пытались wrapper.render().find(".test") сделать это во второй раз?   -  person Aprillion    schedule 24.04.2020


Ответы (1)


У меня была эта проблема раньше, я считаю, что вам нужно использовать метод update вашей смонтированной оболочки:

https://enzymejs.github.io/enzyme/docs/api/ReactWrapper/update.html

Таким образом, ваш тест будет выглядеть примерно так:

test("test", () => {
    wrapper.update();
    expect(wrapper.find(".test").first().text()).toEqual("test");
});
person ant_1_b    schedule 24.04.2020