Angular Jest测试成功,错误打印到控制台

Angular Jest测试成功,错误打印到控制台,angular,jestjs,nrwl,Angular,Jestjs,Nrwl,我正在尝试使用jest和@nrwl/nx创建的角度项目。我已经按照文章将我的应用程序从使用karma转换为jest 我遇到的问题是,尽管我的测试通过了,但由于某种原因,控制台中会显示以下错误: console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29 Error: Error: connect ECONNREFUSED 127.0.0.1:80 at Object.dispatchError (\node_modul

我正在尝试使用
jest
@nrwl/nx
创建的角度项目。我已经按照文章将我的应用程序从使用
karma
转换为
jest

我遇到的问题是,尽管我的测试通过了,但由于某种原因,控制台中会显示以下错误:

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Error: connect ECONNREFUSED 127.0.0.1:80
    at Object.dispatchError (\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:65:19)
    at Request.client.on.err (\node_modules\jsdom\lib\jsdom\living\xmlhttprequest.js:676:20)
    at Request.emit (events.js:187:15)
    at Request.onRequestError (\node_modules\request\request.js:881:8)
    at ClientRequest.emit (events.js:182:13)
    at Socket.socketErrorListener (_http_client.js:391:9)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19) undefined
我只有一个测试,那就是:

import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { RouterTestingModule } from '@angular/router/testing';

import { CommonUtilsModule } from '@lib/common-utils';

describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule, CommonUtilsModule],
      declarations: [AppComponent]
    }).compileComponents();
  }));
  it('should create the app', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  }));
});
出于某种原因,如果我删除以下行,控制台错误不会显示:

const fixture = TestBed.createComponent(AppComponent);
我已经注意这个错误好几个小时了,但似乎不知道是什么原因造成的。我在测试或组件中没有执行任何http请求,所以不知道为什么会显示
econnreference

以前有人犯过这个错误吗


谢谢

当您尝试向不可用的本地主机服务发出请求时,此消息很常见

让我考虑运行一个脚本,该脚本消耗NoDe.js服务,该服务在RoalHoal:80下执行。如果我的节点实例未运行,我将收到类似于您的消息

我认为正在发生的是,您已将端口设置为在80上检查,这通常更常见,默认端口为8080。

如关于
编译组件
中所述:

完成配置后,异步编译测试模块。如果任何测试模块组件具有templateUrl或StyleURL,则必须调用此方法,因为获取组件模板和样式文件必须是异步的。见上文

调用compileComponents后,测试台配置在当前规范期间冻结

因此Jasmine&Angular本机使用fetch来获取HTML,并且必须调用
compileComponents
,才能访问这些HTML文件

我不知道为什么这是必要的,但JSDOM显然无法处理这一问题

我建议您使用该软件包,该软件包使用自定义处理器处理此问题

请确保按照他们的README.md中的安装说明进行操作,因为在撰写此评论时,安装程序有点不稳定,并且不要过多地修改jest配置<代码>ts jest
正在进行重写,并且预设没有赶上最新版本。我强烈建议您仅通过npm安装jest和预设,以确保您的工作区中没有不兼容版本的
ts jest
。这是至关重要的,因为
ts jest
不遵循语义版本控制


另一件需要注意的事情是,只有在使用
--runInBand
/
-i
运行jest时,断点才会起作用。如果您运行
--watch
,在带内运行将不起作用,只有在您只测试一个文件(可以使用filename regex模式实现)时,才会出现断点。多个文件将在多个进程中进行测试,我猜这些进程没有在检查模式下运行,vscode/您最喜欢的调试器无法连接。

谢谢您的回答。我没有设置任何端口。我所做的只是运行ng测试。不管怎样,我不知道它想提出什么样的要求。不用担心。我理解你的观点,但是知道错误的来源可以帮助你追踪问题。它甚至可能是您正在执行的额外脚本,因为该文件位于测试文件夹下。您是否有测试spect文件和触发错误的行?