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

问题描述 投票:7回答:4

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

angular karma-runner travis-ci
4个回答
0
投票

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

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

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

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


8
投票

这就是为我解决的问题:

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

然后我替换了所有出现的

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

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

然后我确保我的每个测试的importsTestBed.configureTestingModule数组中的条目从HttpClientModule变为HttpClientTestingModule

最后我关闭了我的Wifi并再次运行测试。瞧:它很有效!


0
投票

好吧还有另一种方法可以解决这个错误:

对我而言,我忘记打电话了

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.