我正在使用fetch-mock
(v.9.11.0) 和 React 测试库来测试登录表单组件,一旦我有超过 2 个具有模拟获取响应的单元测试,我就会开始收到ECONNREFUSED
错误,并且我的测试失败并显示Network Error
信息。
我的一个单元测试的示例(i18nConfigOptions
在文件开头声明):
it('should produce an error if something unexpected occurs (with return body)', async () => {
await i18n
.use(initReactI18next)
.init(i18nConfigOptions).then(async () => {
render(
<BrowserRouter>
<LoginForm />
</BrowserRouter>,
);
fetchMock.postOnce('/login', {
status: 404,
body: {
error: {
message: 'An error',
},
},
}, {
overwriteRoutes: true,
});
const inputs = screen.getAllByTestId('loginform_input');
userEvent.type(inputs[0], 'test@test.com');
userEvent.type(inputs[1], 'incorrectPassword');
userEvent.click(screen.getByRole('button'));
// wait for the error message to appear on screen
await waitFor(() => screen.findByTestId('loginform_error'));
expect(screen.getByTestId('loginform_error').textContent).toBe('An error');
fetchMock.reset();
});
});
我不认为这是一个设置/拆卸问题,因为我正在fetchMock
单独声明该对象,并确保在每次测试后将其休息。
我可能还应该提到,如果我将选项中的delay
参数设置为fetchMock
0 以外的任何值,这些错误从第一次测试开始发生,这可能指向更广泛的问题。
也许最奇怪的是,我在 M1 MacBook Pro 上看到了错误,但在 2019 年的基于 Intel 的 MacBook Pro 上却没有。这可能是 M1 问题吗?也许测试在 M1 上执行得太快了?将测试拆分为单独的文件也可以防止错误发生,并且所有测试仍然通过。
显然发生了一些奇怪的事情,这让我很困惑。任何建议都感激不尽!