Допустим, у меня есть этот функциональный компонент 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
});
});
Есть ли способ заставить фермент выполнить крюк и пройти тест?