当我根本没有使用它时,为什么会出现 ReferenceError: setImmediate 没有定义?
2022-12-23
3359
我用 React 和 Nest 创建了一个小应用程序,以了解 WebScoket API。 为了不浪费时间,我想将其包装为可部署的应用程序,并将其托管在某个地方。
代码在这里: https://github.com/An1mus/chitchat
在添加一些基本工作流程时,我遇到了以下错误的问题,该错误在运行测试后出现(测试用例通过):
/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:628:9)
at setState (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/[email protected]/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:654:12)
at XMLHttpRequest.handleError (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/[email protected]/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js:572:5)
at ClientRequest.errorHandler (/Users/andrewpetrov/Projects/an1mus/chitchat/client/node_modules/.pnpm/[email protected]/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)
出于某种原因,当我运行测试时,它会触发,即使我唯一的测试是这样的:
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')
});
测试使用
react-scripts test --watchAll=false
运行>
什么会导致这样的错误? 我的猜测是我错误地编写了测试,它与应用程序一起呈现的 WebScokets 有某种联系。
我将不胜感激任何提示。
2个回答
现在回答这个问题可能有点晚了,但这似乎是节点环境的问题。
要解决此问题:
- 安装 polyfill:npm install --save setimmediate
- 在您的 setupTests.js 中:import 'setimmediate';
Honey Sharma
2023-09-16
研究了这个问题之后。
我发现了 2 个主要线程可以帮助你。
-
你可以看看这个
https://github.com/prisma/prisma/issues/8558
我发现与你相关的内容,将其添加到
jest.config.js
中:
global.setImmediate = jest.useRealTimers;
同一线程上有类似的方法:
/**
* @jest-environment jsdom
*/
import {setImmediate} from 'timers'
-
我发现的另一种方法是
jsdom
已被弃用,现在jest.config.js
文件上的设置应该是:
testEnvironment: 'node'
自 v27 起已弃用。您可以在此处扩展信息: https://jestjs.io/blog/2021/05/25/jest-27
Augusto Gonzalez
2023-09-22