我应该在我的测试套件中使用 React.StrictMode 吗?

Wil*_*low 8 javascript unit-testing reactjs jestjs react-strictmode

第一次发帖提问:)

我有一个React应用程序:

// index.js

ReactDOM.render(
  <React.StrictMode>
    <Router>
      <App />
    </Router>
  </React.StrictMode>,
  document.getElementById('root'),
);
Run Code Online (Sandbox Code Playgroud)

我有 24 个jest测试套件,到目前为止,基本上是这样的:

act(() => {
  render(
    <Router>
      <SomeComponentIWantToTest />
    </Router>
  );
});
Run Code Online (Sandbox Code Playgroud)

我想到将测试包装在 中更合适StrictMode,以更接近应用程序的实际渲染方式:

act(() => {
  render(
    <React.StrictMode>
      <Router>
        <SomeComponentIWantToTest />
      </Router>
    </React.StrictMode>
  );
});
Run Code Online (Sandbox Code Playgroud)

尝试之后,我注意到以下几点:

  1. 一件好事是,它在我没有将一些测试代码包装在act. 我能够修复这些地方。欢呼!
  2. 我的测试速度显着减慢。我猜这是因为我的 React 组件由于 Strict Mode 而渲染了两次

另外,快速浏览一下文档这似乎StrictMode只是开发的事情。那么,将测试(理论上与生产中将发生的情况有关)包装起来有意义吗React.StrictMode

Tyl*_*ong 3

不,我不这么认为。您应该测试您的生产系统行为。

参考: https: //react.dev/reference/react/StrictMode

严格模式仅用于开发:

所有这些检查仅限于开发,不会影响生产版本。

测试仅开发的东西有什么意义?

而严格模式会进行双重渲染并重新运行效果。您绝对不希望您的生产系统出现这样的行为。因此,不要为其编写测试用例,因为该行为不是预期的。这只是为了开发时间。

顺便说一下,官方的react-test-renderer不支持严格模式。这可能意味着,“正式”没有必要测试它。