0

我正在使用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参数设置为fetchMock0 以外的任何值,这些错误从第一次测试开始发生,这可能指向更广泛的问题。

也许最奇怪的是,我在 M1 MacBook Pro 上看到了错误,但在 2019 年的基于 Intel 的 MacBook Pro 上却没有。这可能是 M1 问题吗?也许测试在 M1 上执行得太快了?将测试拆分为单独的文件也可以防止错误发生,并且所有测试仍然通过。

显然发生了一些奇怪的事情,这让我很困惑。任何建议都感激不尽!

4

0 回答 0