В настоящее время я работаю над обновлением зависимостей npm для проекта, которым я владею, и столкнулся с несколькими неудачными тестовыми примерами из-за изменения поверхностного поведения компонентов.
Я перенес зависимости реагирования / энзима / шута от
"react": "15.6.1",
"enzyme": "3.3.0",
"enzyme-adapter-react-15": "1.0.5",
"jest": "23.6.0",
до
"react": "16.8.6",
"enzyme": "3.10.0",
"enzyme-adapter-react-16": "1.14.0"
"jest": "24.8.0",
В предыдущей комбинации следующий тест завершается успешно:
describe("TpidTenantList", () => {
it("test components", () => {
const Foo = props => <div className="Foo" />;
const Bar = props => (
<div className="Bar">
<Foo />
<Foo />
</div>
);
const wrapper = shallow(<Bar />);
expect(wrapper.find(Foo).length).toBe(2);
});
});
Однако с новой комбинацией этот тест не пройден. Глядя на рендеринг html для оболочки, я вижу, что на самом деле мелкий рендеринг на самом деле рендерил субкомпонент Foo, давая
<div class="Bar">
<div class="Foo"></div>
<div class="Foo"></div>
</div>
Если вместо этого я изменю тест на .find(".Foo")
, тест пройден, однако некоторые тестируемые компоненты содержат HighChart и другие библиотеки, которые проблематично отображать.
Я попытался обернуть тестируемый компонент, а также задать опцию disableLifecycleMethods
для поверхностной обработки, но полное дерево компонентов, похоже, выполняет рендеринг.
В идеале я хотел бы привести поведение к старой библиотеке комбинаций, или, если есть предпочтительный шаблон, я был бы рад принять это.