当多个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实现的测试在并发运行时也会遇到同样的问题。
基于以下两个事实,我至少说服了自己没有竞争条件:
- 每个Jest测试文件在它自己的子进程中运行。(这在#5623和其他地方提到过。)所以每个测试文件都应该有自己的
server
实例。 - Node上的MSW只是猴子补丁功能,如
fetch()
和XMLHttpRequest
,而不是实际启动web服务器。这是在#407中提到的。因此,猴式补丁应该被隔离到运行每个测试文件的每个进程中。