浅层渲染

如何引入

  1. import ShallowRenderer from 'react-test-renderer/shallow'; // ES6
  2. var ShallowRenderer = require('react-test-renderer/shallow'); // ES5 with npm

概览

当为 React 编写单元测试时,浅层渲染十分有用。浅层渲染可以只渲染组件的“第一层”,并且对组件的 render 方法的返回值进行断言,不必担心子组件的行为,子组件并没有实例化或被渲染。并且浅层渲染不依赖 DOM。

例如,如果你有如下的组件:

  1. function MyComponent() {
  2. return (
  3. <div>
  4. <span className="heading">Title</span>
  5. <Subcomponent foo="bar" />
  6. </div>
  7. );
  8. }

你可以使用断言:

  1. import ShallowRenderer from 'react-test-renderer/shallow';
  2. // 测试代码:
  3. const renderer = new ShallowRenderer();
  4. renderer.render(<MyComponent />);
  5. const result = renderer.getRenderOutput();
  6. expect(result.type).toBe('div');
  7. expect(result.props.children).toEqual([
  8. <span className="heading">Title</span>,
  9. <Subcomponent foo="bar" />
  10. ]);

浅层测试(Shallow testing)目前有些局限性,即不支持 refs。

注意:

建议你查阅 Enzyme 的浅层渲染的 API。它在相同的功能基础上提供了更棒更高级的 API。

参考

shallowRenderer.render()

你可以把 shallowRenderer 看作用来渲染测试中组件的“容器”,且可以从容器中取到该组件的输出内容。

shallowRenderer.render()ReactDOM.render() 很像,但是它不依赖 DOM 且只渲染一层。这意味着你可以对组件和其子组件的实现进行隔离测试。

shallowRenderer.getRenderOutput()

shallowRenderer.render() 被调用后,你可以使用 shallowRenderer.getRenderOutput() 来获取浅层渲染的输出内容。

然后,你就可以开始对输出内容进行断言操作。