如何在反应测试库中暂停模拟服务工作人员以测试中间状态?

rah*_*aha 2 unit-testing reactjs react-testing-library msw

我正在使用 MSW(模拟服务工作线程)通过 React 测试库来模拟我的 React 测试中的 HTTP 响应。但是,在某些反应组件中,我有一些加载状态,直到响应完成。

为了测试中间加载状态,有没有办法暂停正在进行的 Service Worker API 并进行一些测试(这样可以保证测试的一致性),然后继续进行进一步的测试?

ket*_*ito 5

首先,使用 React 测试库很可能意味着您正在谈论 Node.js 中的测试。Node.js 中没有 Service Worker API,因此我们可以放弃 Worker 来解决您的用例。

似乎没有实际需要暂停请求来实现您想要的目的。请注意,大多数测试框架会立即执行断言,一旦底层代码匹配(即您的 UI 处于加载状态),您就不会遇到任何获取断言的问题。在响应中添加短短 100 毫秒的延迟就足以让 Jest 看到存在加载状态并将断言标记为已通过:

it('displays the loading state', () => {
  server.use(
    rest.get('/resource', (req, res, ctx) => {
      return res(ctx.delay(100), /* the rest of the mocked response */)
    })
  )

  render(<YourComponent />
  // ...assert the loading state of the UI.
})
Run Code Online (Sandbox Code Playgroud)

尝试一下这种方法,如果您有任何问题,请告诉我。