Angular 5.2测试中的Jasmine 3错误

时间:2018-04-09 11:14:20

标签: angular unit-testing jasmine karma-jasmine

我在运行{ "@angular/animations": "^5.2.0", "@angular/common": "^5.2.0", "@angular/compiler": "^5.2.0", "@angular/core": "^5.2.0", "@angular/forms": "^5.2.0", "@angular/http": "^5.2.0", ... "zone.js": "^0.8.19" } 后遇到一些错误,在升级到我的所有软件包后,我得到了以下版本:

"jasmine-core": "~3.1.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.0",
"karma-chrome-launcher": "~2.2.0"

和devDependencies

"message": "An error was thrown in afterAll\n[object ErrorEvent]", "str": "An error was thrown in afterAll\n[object ErrorEvent]"

我收到了这个错误:

import { async, TestBed  } from '@angular/core/testing';
import { UserInmailComponent } from './user-inmail.component';

describe('Component: UserInmail', () => {
it('should create an instance', () => {
  const component = new UserInmailComponent();
  expect(component).toBeTruthy();
});
});

karma screenshot

我所有的测试都非常简单,如:

{{1}}

我认为我的测试文件不会导致问题。

3 个答案:

答案 0 :(得分:3)

即使在使用“ jasmine-core v2.8.0”的情况下,我在多个单元测试中也遇到了此错误消息的麻烦。经过一番研究,我能够重现它,并发现当您使用缺少必要变量的模拟或存根(在我的情况下> observables)时,它会发生。

例如,如果您像这样初始化TestBed:

TestBed.configureTestingModule({
  declarations: [HeaderComponent],
  imports: [BrowserModule],
  providers: [
    {provide: AuthService, useClass: AuthServiceStub}
  ]
})

,您在AuthService中有一个可观察的对象,该对象在HeaderComponent中以某种方式使用,但是您忘记在“ AuthServiceStub”中定义该可观察的对象,那么它将导致 “在afterAll \ n [object ErrorEvent]中引发错误”

这是茉莉花/因果报应的非常令人困惑的行为,因为它没有给您任何提示。我认为它应该引发空指针异常,因为该属性未在存根内部定义。

答案 1 :(得分:1)

它与zone.js中的错误有关 你必须将jasmine版本降级到2.9以使其正常工作

"jasmine-core": "~2.9.0",

答案 2 :(得分:1)

根据我的研究,这似乎是非常广泛的错误,可能是由许多开发人员错误引起的。 我的特定错误是使用未定义的URL调用HttpClient(HttpClientTestingModule)。该错误在我的浏览器中相对无效,一旦我修复了该错误,现在每次都会通过测试运行。我花了两天的时间拔头发,但是我要做的就是茉莉花spyOn.and.callThrough()而不是仅仅使用spyOn