Подтвердить что ты не робот

Отключить/уничтожить компонент в jsdom test

Есть ли способ размонтировать и мусор собирать компонент React, который был смонтирован с помощью TestUtils.renderIntoDocument внутри теста jsdom?

Я пытаюсь проверить что-то, что происходит на componentWillUnmount, а TestUtils.renderIntoDocument не возвращает DOM node для вызова React. unmountComponentAtNode.

4b9b3361

Ответ 1

Нет, но вы можете просто использовать ReactDOM.render вручную:

var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);

Это точно то, что ReactTestUtils делает в любом случае, поэтому нет причин не делать этого таким образом, если вам нужна ссылка на контейнер.

Ответ 2

Вызов componentWillUnmount напрямую не будет работать для детей, которым необходимо очистить вещи при размонтировании. И вам также не нужно реплицировать метод renderIntoDocument, так как вы можете просто использовать parentNode:

React.unmountComponentAtNode(React.findDOMNode(component).parentNode);

Обновление: по запросу 15 вам нужно использовать ReactDOM для достижения того же:

import ReactDOM from 'react-dom';
// ...
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(component).parentNode);

Ответ 3

Просто обновить ответ @BenAlpert. React.renderComponent будет устаревшим, поэтому вместо этого вы должны использовать методы ReactDOM:

var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);

Ответ 4

После теста вы можете вызвать компонент componentWillUnmount() на компоненте вручную.

beforeEach ->
  @myComponent = React.addons.TestUtils.renderIntoDocument <MyComponent/>

afterEach ->
  @myComponent.componentWillUnmount()

Ответ 5

Просто наткнулся на этот вопрос, цифра, которую я бы предоставил, чтобы непосредственно решить ее, используя описанный API визуализации для визуализации. Это решение работает в контексте PhantomJS.

Чтобы подключиться к документу node:

theComponent = TestUtils.renderIntoDocument(<MyComponent/>);

Чтобы размонтировать из документа node:

React.unmountComponentAtNode(document);