Тестирование компонента, использующего React.useEffect с использованием фермента - PullRequest
2 голосов
/ 10 мая 2019

Допустим, у меня есть этот функциональный компонент React.

const SomeComponent = ({ onShow }) => {
  React.useEffect(onShow, []);
  return <div />;
};

Теперь я хочу провести модульное тестирование, при котором SomeComponent вызывает onShow в первый раз, когда он отображается.

Возможно ли это с помощью enzyme?


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

Тест, использующий библиотеку реагирующих тестов, проходит, но ферментный тест не пройден, хотя они тестируют один и тот же код.

Пример:

import * as reactTestingLibrary from "react-testing-library";
import * as React from "react";
import * as enzyme from "enzyme";

const SomeComponent = ({ onShow }) => {
  React.useEffect(onShow, []);
  return <div />;
};

describe("Testing useEffect with enzyme", () => {
  it("calls the side effect", async () => {
    const aFn = jest.fn();
    enzyme.mount(<SomeComponent onShow={aFn} />);
    expect(aFn).toHaveBeenCalledTimes(1); // this test fails
  });
});

describe("Testing useEffect with react-testing-library", () => {
  it("calls the side effect", async () => {
    const aFn = jest.fn();
    reactTestingLibrary.render(<SomeComponent onShow={aFn} />);
    expect(aFn).toHaveBeenCalledTimes(1); // this test passes
  });
});

Есть ли способ заставить фермент выполнить крюк и пройти тест?

1 Ответ

0 голосов
/ 12 мая 2019

Да, можно тестировать компоненты, которые используют крючки, используя фермент.

Обновление энзим-адаптера-реаги-16 до последней версии (1.12.1) решило проблему.

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