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