Karma开始失败 - HeadlessChrome - 错误未捕获[对象]

时间:2018-01-04 18:34:31

标签: angular karma-runner travis-ci

我正在使用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]错误的原因。我应该采取哪些额外步骤进行故障排除?

4 个答案:

答案 0 :(得分:6)

这是为我解决的问题:

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

然后我替换了所有出现的

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

使用

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

然后,我确保将我的测试的imports的{​​{1}}数组中的条目从TestBed.configureTestingModule更改为HttpClientModule

最后,我关闭了Wifi,然后再次运行测试。瞧,它行得通!

答案 1 :(得分:0)

完全披露,我是贾斯汀解决这个问题的人。

问题在于我们将模块导入到单元测试中。这些模块的组件具有ngOnInit,可以发出HTTP请求。模块将实际组件注入测试,并尝试发出HTTP请求但失败。因为它不在普通堆栈中,所以堆栈跟踪给我们提供了非常无用的错误Uncaught [object Object]

为了避免这个问题,并且组件没有被定义,我们使用Christian Nunciato的有用ng2-mock-component库来创建一个带有所有相同输入的模拟组件。

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

答案 2 :(得分:0)

好的,您也可以通过另一种方式来解决此错误:

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

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

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

答案 3 :(得分:0)

在我的案例中,问题是组件测试(其子组件在其ngOnInit方法中进行http调用)没有导入HttpClientTestingModule。 如果运行测试并在网络页面上打开devtools,则可以检查在测试过程中是否进行了HTTP调用。导入模块后,在测试过程中不会进行http调用。