Как запустить отключение функциональных компонентов во время тестирования?

#reactjs #jestjs #react-hooks #enzyme

Вопрос:

Я использовал «useEffect» для достижения функциональности «componentWillUnmount» в функциональном компоненте. Как запустить это при тестировании компонента с помощью Jest/фермента?

Мой Компонент:

 const myComp = () => {
  useEffect(() => () => {
    console.log('Unmounted');
  }, []);
  return <div>Test</div>;
}
 

Комментарии:

1. @slideshowp2, спасибо за ваш ответ. Возможно, вы не заметили, что я поставил консоль. войдите в функцию возврата, а не в обратный вызов. Или ты можешь показать мне правильный путь…?

Ответ №1:

Согласно этой проблеме, мы знаем, что shallow рендеринг не поддерживает useEffect крючок. Нам нужно использовать mount и вызвать метод .unmount() вручную.

Напр.

index.tsx :

 import React, { useEffect } from 'react';

export const MyComp = () => {
  useEffect(
    () => () => {
      console.log('Unmounted');
    },
    []
  );
  return <div>Test</div>;
};
 

index.test.tsx :

 import React from 'react';
import { mount } from 'enzyme';
import { MyComp } from './';

describe('67384129', () => {
  it('should pass', () => {
    const wrapper = mount(<MyComp />);
    wrapper.unmount();
  });
});
 

результат теста:

  PASS  examples/67384129/index.test.tsx (8.233 s)
  67384129
    ✓ should pass (53 ms)

  console.log
    Unmounted

      at examples/67384129/index.tsx:6:15

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        9.121 s
 

версии пакетов:

 "enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.5",
"react": "^16.14.0"
"jest": "^26.6.3",
"jest-environment-enzyme": "^7.1.2",
"jest-enzyme": "^7.1.2",
 

Комментарии:

1. Это то, что я искал. обертка.размонтировать. Спасибо.