Jest Enzyme React 测试实践记录

1. Snapshot Test

import React from 'react';
import { render } from 'enzyme';
import XXXComponent from './XXXComponent';

// 可以使用 render 或者 shallow
// 测试了一下,mount 偶尔会报 timeout 的错误
// 具体使用什么 api, 可以参考 antd
describe('<XXXComponent /> Component', () => {
  it('should match snapshot', () => {
    const component = render( <XXXComponent />);
    expect(component).toMatchSnapshot();
  });
})

1.1 更新快照结果

jest -u 或者 npm run test -- -u

2. 模拟事件

2.1 click 事件

2.2 change 事件

2.3 keydown 键盘事件

3. 更新 props

如果想测试组件 props 的变更,可以使用 setProps

4. 测试函数执行

5. 通过 .props() 获得组件的 props

只能用于 Class 组件

如例4,其中 node 为 ,我们通过判断 node.props().checked 来判断该元素是否被选中。

6. 通过 .state() 获得组件的 state

只能用于 Class 组件

7. 模拟 mouseenter

即在模拟 mouseenter 的时候,最好是给原绑定事件的元素去模拟事件(而不是想着事件会冒泡,而click 事件确实能利用冒泡),不然可能会出现异常。

8. 获取原生 dom 对象

getDOMNode() 通过该方法可以获得原生的dom 对象

注意事项

  1. 千万不要传入 this 作为 props

在平常写代码中,如果 B 组件中要用到许多 A 组件中的值(如 props 或者 state ), 为了偷懒,我们可能会将 this 作为参数传递下去。然后在 B 组件中通过 this.parent.xxx 来获取对应的属性。

千万不要这样做,在配合 enzyme mount 方法做测试的时候,会形成递归。造成内存不够用的情况。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Last updated

Was this helpful?