Отключить/уничтожить компонент в jsdom test
Есть ли способ размонтировать и мусор собирать компонент React, который был смонтирован с помощью TestUtils.renderIntoDocument
внутри теста jsdom?
Я пытаюсь проверить что-то, что происходит на componentWillUnmount
, а TestUtils.renderIntoDocument
не возвращает DOM node для вызова React. unmountComponentAtNode
.
Ответы
Ответ 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);