当我根本不使用它时,为什么 ReferenceError: setImmediate 未定义?

Ani*_*mus 6 javascript websocket reactjs react-testing-library

我使用 React 和 Nest 创建了一个小型应用程序,以了解 WebScoket api。不仅仅是浪费时间,我想将其包装为可部署的应用程序,并将其托管在某个地方。

代码在这里: https: //github.com/An1mus/chitchat

在添加一些基本工作流程时,我遇到了以下错误的问题,该错误在运行测试后出现(测试用例通过):

/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/xmlhttprequest-ssl@2.0.0/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:628
        setImmediate(function() { self["on" + event]() })
        ^

ReferenceError: setImmediate is not defined
    at XMLHttpRequest.dispatchEvent (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/xmlhttprequest-ssl@2.0.0/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:628:9)
    at setState (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/xmlhttprequest-ssl@2.0.0/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:654:12)
    at XMLHttpRequest.handleError (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/xmlhttprequest-ssl@2.0.0/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:572:5)
    at ClientRequest.errorHandler (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/xmlhttprequest-ssl@2.0.0/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:490:14)
    at ClientRequest.emit (node:events:527:28)
    at Socket.socketErrorListener (node:_http_client:454:9)
    at Socket.emit (node:events:527:28)
    at emitErrorNT (node:internal/streams/destroy:164:8)
    at emitErrorCloseNT (node:internal/streams/destroy:129:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)

Run Code Online (Sandbox Code Playgroud)

由于某种原因,当我运行测试时它会触发,即使我唯一的测试是这样的:

import React from 'react';
import { render } from '@testing-library/react';
import App from './App';

test('renders the app', async () => {
  // this is a workaround for issue #1695 in jsdom
  window.HTMLElement.prototype.scrollIntoView = function() {};

  const {container} = await render(<App />);
  expect(container.querySelector('h1')).toHaveTextContent('Welcome to ChitChat')
});
Run Code Online (Sandbox Code Playgroud)

测试运行于react-scripts test --watchAll=false

什么会导致这样的错误?我的猜测是我错误地编写了测试,它在某种程度上与与应用程序一起渲染的 WebScokets 有关。

我将不胜感激任何提示。

Hon*_*rma 1

回答这个问题可能有点晚了,但这似乎是节点环境的问题。

要解决这个问题:

  1. 安装polyfill:npm install --save setimmediate
  2. 在 setupTests.js 中: import 'setimmediate';