reactjs - 酶测试代码内存清理
问题描述
我一直在看很多使用 Enzyme 和 Jest 测试 react 和 redux 应用程序的示例,很少有人提到代码清理。使用时shallow
或mount
您是否明确需要调用unmount
或detach
尝试保持内存膨胀和运行时下降?
解决方案
有一种情况我们会想用它detach
来清理。我们先看简单shallow
和mount
案例。
分配给变量
这种“简单”的情况是我们简单地将渲染分配给var
// const
。let
如果我们看一下Enzyme Github中使用 Jest 和 Enzyme 的(缩减)示例。
describe('<MyComponent />', () => {
it('renders three <Foo /> components', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.find(Foo)).to.have.lengthOf(3);
});
it('renders an `.icon-star`', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.find('.icon-star')).to.have.lengthOf(1);
});
});
我们可以看到shallow
方法被调用,结果被分配给一个const
. 结果是一个ShallowWrapper
对象。
当执行离开它定义的块时const
具有块范围- 在这种情况下是测试箭头函数 - Javascript引擎将自动释放ShallowWrapper
内存。
正因为如此,我们不需要担心卸载 - 这仅用于测试特定的组件生命周期方法。
将组件附加到 DOM
我们还可以将组件附加到 DOM。
如果我们看一下自动生成的测试用例create-react-scripts
。
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
});
这个例子没有使用 Enzyme,但是和你attachTo
在 Enzymemount
函数中使用时的概念是一样的。
我们可以看到我们的 Component 被附加到div
文档中的 a,然后ReactDOM.unmountComponentAtNode
被调用进行清理。这实际上就是detach
所谓的。
我们需要进行此清理,因为对渲染组件的引用存在于我们的块范围之外,因此在执行退出此块时不会被释放。
推荐阅读
- reactjs - 在反应中获取组件的宽度
- jquery - document.read 函数中的 Trigger.('click') 函数始终无法使用 jquery 尝试所有示例但无法正常工作
- docker - 更改静态目录的所有权在 kubernetes 中不起作用
- javascript - 如何映射异步函数的值
- saxon - 这是使用 Saxon 获取 XML 文件中所有元素和属性的最佳方式吗?
- python-3.x - discord.py 中嵌入多张照片
- reactjs - 如何获取本地手风琴标题组件中每个项目的索引?(反应原生)
- reactjs - React 错误边界并不能防止 cra 应用程序崩溃
- python - 如何在 python 中解析列表和字典(openAPI 和 Swagger)?
- javascript - laravel 刀片内的 vue.js 模板