在jsdom测试中卸载/销毁组件

tre*_*nik 21 javascript jsdom reactjs

有没有办法卸载和垃圾收集TestUtils.renderIntoDocument在jsdom测试中使用安装的React组件?

我正在尝试测试发生的事情componentWillUnmount并且TestUtils.renderIntoDocument不会返回任何要调用的DOM节点React. unmountComponentAtNode.

Sop*_*ert 28

不,但你可以简单地ReactDOM.render手动使用:

var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);
Run Code Online (Sandbox Code Playgroud)

这正是ReactTestUtils无论如何都要做的,所以如果你需要对容器的引用,没有理由不这样做.


Chr*_*ris 21

componentWillUnmount直接呼叫不适用于任何需要在卸载时清理东西的孩子.而且您也不需要复制该renderIntoDocument方法,因为您可以使用parentNode:

React.unmountComponentAtNode(React.findDOMNode(component).parentNode);
Run Code Online (Sandbox Code Playgroud)

更新:从React 15开始,您需要使用它ReactDOM来实现相同的目标:

import ReactDOM from 'react-dom';
// ...
ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(component).parentNode);
Run Code Online (Sandbox Code Playgroud)


car*_*sba 8

只是为了更新@BenAlpert的答案.React.renderComponent将很快被弃用,因此您应该使用ReactDOM方法:

var container = document.createElement('div');
ReactDOM.render(<Component />, container);
// ...
ReactDOM.unmountComponentAtNode(container);
Run Code Online (Sandbox Code Playgroud)