We want to hear from you!Take our 2021 Community Survey!
This site is no longer updated.Go to react.dev

Shallow Renderer

如何 Import

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

概觀

當在為 React 寫單元測試時,shallow render 十分有用。Shallow render 可以只 render 「第一層」的 component,並且對 component 的 render 方法的回傳值進行 assert,不必擔心 child component 的行為,child component 並沒有被實例化或被 render。Shallow render 不依賴 DOM。

例如,假設你有下列 component:

function MyComponent() {
  return (
    <div>
      <span className="heading">Title</span>
      <Subcomponent foo="bar" />
    </div>
  );
}

你可以使用 assert:

import ShallowRenderer from 'react-test-renderer/shallow';

// in your test:
const renderer = new ShallowRenderer();
renderer.render(<MyComponent />);
const result = renderer.getRenderOutput();

expect(result.type).toBe('div');
expect(result.props.children).toEqual([
  <span className="heading">Title</span>,
  <Subcomponent foo="bar" />
]);

Shallow testing 目前有些限制,並不支援 refs。

注意:

我們建議你可以查看 Enzyme 的 Shallow Rendering API。它在相同功能的基礎上提供更棒更高階的 API。

參考

shallowRenderer.render()

你可以把 shallowRenderer 想成一個用來 render 測試中 component 的「空間」,並且可以從中提取該 component 輸出的內容。

shallowRenderer.render() 類似於 root.render(),但它不依賴 DOM 且只 render 一層。這意味著你可以對測試的 component 及其 child component 進行隔離測試。

shallowRenderer.getRenderOutput()

在 shallowRenderer.render() 被呼叫後,你可以使用 shallowRenderer.getRenderOutput() 來取得該 component 第一層的輸出內容。

然後,就可以對輸出的內容進行 assert 操作。

Is this page useful?Edit this page