是否存在使用msw的竞态条件?



当多个Jest测试文件并发运行时,我担心竞争条件w.r.t. MSW。这是个问题吗?

MSW入门指南建议在setupTests.js中使用以下代码:

// Reset any request handlers that we may add during the tests,
// so they don't affect other tests.
afterEach(() => server.resetHandlers())

但是,如果两个测试同时运行,并且每个测试都以如下开头:

server.use(rest.get('https://api.backend.dev/user', (req, res, ctx) => {
return res(ctx.json({ firstName: 'Paul' }))
})),

server.use(rest.get('https://api.backend.dev/user', (req, res, ctx) => {
return res(ctx.json({ firstName: 'Ringo' }))
})),

在一个测试中设置的处理程序不能被另一个测试调用(反之亦然)?

我需要使用-runinband吗?

PS:也许我误解了Jest,因为它看起来像"mock domest"。由jsdom实现的测试在并发运行时也会遇到同样的问题。

基于以下两个事实,我至少说服了自己没有竞争条件:

  1. 每个Jest测试文件在它自己的子进程中运行。(这在#5623和其他地方提到过。)所以每个测试文件都应该有自己的server实例。
  2. Node上的MSW只是猴子补丁功能,如fetch()XMLHttpRequest,而不是实际启动web服务器。这是在#407中提到的。因此,猴式补丁应该被隔离到运行每个测试文件的每个进程中。

最新更新