Javascript 使用fetchMock&`userEvent。使用React测试库在“测试”中单击“每个”

Javascript 使用fetchMock&`userEvent。使用React测试库在“测试”中单击“每个”,javascript,jestjs,react-testing-library,Javascript,Jestjs,React Testing Library,我想测试一系列的结果,给出对我们请求的端点的回调响应 鉴于以下代码: description('当我点击“继续购物”按钮时,()=>{ 只测试每个` 应用程序状态| routeName | routeURL ${'CASH_ACCEPT'}}}${'Checkout Shipping'}}${'/Checkout/Shipping.page'} ${'Decedden'}|${'Account Rejected'}|${'/Account/application/accountRejected.

我想测试一系列的结果,给出对我们请求的端点的回调响应

鉴于以下代码:

description('当我点击“继续购物”按钮时,()=>{
只测试每个`
应用程序状态| routeName | routeURL
${'CASH_ACCEPT'}}}${'Checkout Shipping'}}${'/Checkout/Shipping.page'}
${'Decedden'}|${'Account Rejected'}|${'/Account/application/accountRejected.page'}
${'EXISTING_ACCOUNT_PROFILE_MATCHED'}|${'EXISTING ACCOUNT Found'}|${'/ACCOUNT/accountFound.page?email=c***********4@example.com'}
${'a non-recognized'}|${'Server Error'}|${'/serverError.page'}
`(
'然后,$applicationStatus响应应将我带到$routeName页面',
异步({applicationStatus,routeURL})=>{
fetchMock.post(`/api/account-application/applications`{
数据:{
id:'123',
键入:“帐户应用程序”,
属性:{
applicationStatus:`${applicationStatus}`,
电子邮件:“t*********@example.com”,
},
},
});
const component=render();
等待动作(异步()=>{
等待userEvent。单击(component.getByText(/Continue to shop/i));
});
expect(component.getByTestId('load-overlay');
//eslint禁用下一行安全性/检测非文字fs文件名
expect(global.open).toBeCalledWith(${routeURL}','u self');
},
);
我希望每个测试迭代只触发一次,但是,似乎每个测试都失败了。似乎
userEvent.click
不止一次发生,并且正在保存上一次的单击:

应为:“/account/accountFound.page?email=c_**\***_4@example.com“,”你自己“
收到
1:“/checkout/shipping.page”,“\\u self”
2:“/account/application/accountRejected.page”,“\\u self”
3:“/account/accountFound.page?email=t**\***@example.com”,“\\u self”
电话号码:3
我的理解是,在每次测试之后,
清理
都会运行,并且在下一次测试之前应该重置所有内容。有人能看到我在这里做错了什么吗?谢谢!

expect(global.open)
断言失败,而不是
userEvent。单击

Jest在默认情况下不会重置间谍调用,并且不会在提供的代码中执行手动清理

使用
resetallmock
restoreallmock

afterEach(() => {
  jest.restoreAllMocks();
});
后者要求在每次测试之前设置
global.open
spy,而不仅仅是一次

或者更好,启用或配置选项,因为在编写良好的测试中,交叉污染几乎是不可取的