TypeError {Angular测试中的ngDebugContext

时间:2018-03-05 11:19:08

标签: angular unit-testing jasmine

本单元测试

 it('should invoke copy method', fakeAsync(() => {
    spyOn(testClipboardService, 'copy');
    linkEl = fixture.debugElement.query(By.css('.mat-raised-button')).nativeElement;
    linkEl.click();
    expect(testClipboardService.copy).toHaveBeenCalled();
  }));

它已成功通过,但在控制台中我有一个错误,这引起了这一行:

linkEl.click();

我不明白为什么

  

'ERROR',TypeError {ngDebugContext:DebugContext_ {view:Object {def:...,parent:...,viewContainerParent:...,parentNodeDef:...,context:...,component :. ..,nodes:...,state:...,root:...,renderer:...,oldValues:...,disposables:...,initIndex:...},nodeIndex:0, nodeDef:Object {nodeIndex:...,parent:...,renderParent:...,bindingIndex:...,outputIndex:...,checkIndex:...,flags:...,childFlags:.. 。,directChildFlags:... etc

提前致谢

4 个答案:

答案 0 :(得分:3)

在我的情况下,我可以通过在配置测试平台时将NoopAnimationsModule添加到我的导入中来消除错误。基于我发现的内容,您在运行测试时可能缺少导入。

示例:

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ MyAwesomeComponent ],
      imports: [
        NoopAnimationsModule, // I had to add this
        FormsModule,
        RouterTestingModule
      ]
    })
    .compileComponents();
  }));

答案 1 :(得分:1)

可能的问题出在spyOn(testClipboardService, 'copy')之后的fixtures.detectChanges()中。您可以检查是否在beforeEach中先执行detectChanges吗?如果是,则应在“ detectChanges”第一次之前“清除”所有间谍。

答案 2 :(得分:0)

对我来说,这个错误也与导入似乎有关。我在单击按钮时调用的函数中使用了matSort。当我添加:

import { MatSort } from '@angular/material'; 

到我的spec.ts文件,错误就消失了。

答案 3 :(得分:0)

我也遇到了这个错误,因为我忘记了从我的代码所订阅的模拟函数中返回一个可观察到的东西。

例如我有

identityService = {authenticate: jasmine.createSpy()};
// ... 
// call function that includes code like this identityService.authenticate().subscribe( ...
// ... The error is logged

我替换为

identityService = {authenticate: jasmine.createSpy()};
identityService.authenticate.and.returnValue(
  of({})
);
//... 
// call function that includes code like this identityService.authenticate().subscribe( ...