Karma 启动失败 - HeadlessChrome - 错误未捕获 [object Object]

Karma Start Fails - HeadlessChrome - ERROR Uncaught [object Object]

我正在使用 Karma 运行 测试我的 Angular 4 应用程序。 它在本地工作,但当它在我的主机环境 (Travis CI) 上 运行 时,它失败并显示以下信息:

INFO [HeadlessChrome 0.0.0 (Ubuntu 0.0.0)]: Connected on socket vT0QnQaqRkn010dfsw with id 10189531

HeadlessChrome 0.0.0 (Ubuntu 0.0.0): Executed 0 of 180 SUCCESS (0 secs / 0 secs)

e 0.0.0 (Ubuntu 0.0.0): Executed 1 of 180 SUCCESS (0 secs / 0.714 secs)

HeadlessChrome 0.0.0 (Ubuntu 0.0.0) ERROR

  Uncaught [object Object]

  at http://localhost:9876/_karma_webpack_/vendor.bundle.js:14078

我尝试按照 "Uncaught [object Object]" when running karma tests on Angular 的建议(删除 NPM 缓存等)进行操作,但没有解决我的问题。

如何确定导致此 Uncaught [object Object] 错误的原因。我应该采取哪些额外步骤来解决问题?

完全公开,我是解决 Justin 这个问题的人。

问题是我们将模块导入到我们的单元测试中。这些模块有一个组件 ngOnInit 发出 HTTP 请求。该模块将真实组件注入到测试中,并尝试发出 HTTP 请求但失败了。因为它在正常堆栈之外,堆栈跟踪给了我们非常无用的错误 Uncaught [object Object].

为了避免这个问题并使组件不被定义,我们使用 Christian Nunciato 的有用 ng2-mock-component 库来制作一个接受所有相同输入的模拟组件。

因为模拟组件有自己的单元测试,所以我们不关心父组件上的单元测试是否不同时测试子组件。

这是为我修复的:

我在整个项目中搜索了所有 *.spec.ts 文件中出现的 HttpClientModule。结果我有几个!

然后我替换了所有出现的

import { HttpClientModule } from '@angular/common/http';

import { HttpClientTestingModule } from '@angular/common/http/testing';

然后我确保我的每个测试 TestBed.configureTestingModuleimports 数组中的条目从 HttpClientModule 更改为 HttpClientTestingModule

最后我关闭了 Wifi 并再次 运行 测试。瞧:它起作用了!

还有另一种方法也可能会出现此错误:

对我来说,是我忘了打电话给

    beforeEach(() => {
      TestBed.configureTestingModule({
      });
    });

我的猜测是,如果不调用它,它会从 AppModule 获取 NgModule,从而尝试导入其中导致此问题的所有模块

在我的例子中,问题是组件测试 child-components 在其 ngOnInit 方法中进行了 http 调用,但没有导入 HttpClientTestingModule。 如果您 运行 测试并在网页上打开开发工具,您可以检查测试期间是否进行了 http 调用。导入模块后,在测试期间没有进行任何 http 调用。