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.configureTestingModule
的 imports
数组中的条目从 HttpClientModule
更改为 HttpClientTestingModule
。
最后我关闭了 Wifi 并再次 运行 测试。瞧:它起作用了!
还有另一种方法也可能会出现此错误:
对我来说,是我忘了打电话给
beforeEach(() => {
TestBed.configureTestingModule({
});
});
我的猜测是,如果不调用它,它会从 AppModule 获取 NgModule,从而尝试导入其中导致此问题的所有模块
在我的例子中,问题是组件测试 child-components 在其 ngOnInit 方法中进行了 http 调用,但没有导入 HttpClientTestingModule。
如果您 运行 测试并在网页上打开开发工具,您可以检查测试期间是否进行了 http 调用。导入模块后,在测试期间没有进行任何 http 调用。
我正在使用 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.configureTestingModule
的 imports
数组中的条目从 HttpClientModule
更改为 HttpClientTestingModule
。
最后我关闭了 Wifi 并再次 运行 测试。瞧:它起作用了!
还有另一种方法也可能会出现此错误:
对我来说,是我忘了打电话给
beforeEach(() => {
TestBed.configureTestingModule({
});
});
我的猜测是,如果不调用它,它会从 AppModule 获取 NgModule,从而尝试导入其中导致此问题的所有模块
在我的例子中,问题是组件测试 child-components 在其 ngOnInit 方法中进行了 http 调用,但没有导入 HttpClientTestingModule。 如果您 运行 测试并在网页上打开开发工具,您可以检查测试期间是否进行了 http 调用。导入模块后,在测试期间没有进行任何 http 调用。