业力单元测试错误:模块导入了意外的值。请添加一个@NgModule批注

时间:2019-02-19 18:44:40

标签: angular electron karma-jasmine ng-modules

我通过以下方式创建了一个全新的组件:

ng g mytest1

然后我将构造函数行更改为此:

constructor(private dialogRef: MatDialogRef<Mytest1Component>) { }

,并添加了所需的导入:

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

之后,我通过以下方式运行Karma单元测试项目:

ng test

测试失败。我收到此错误消息:

  

错误:StaticInjectorError(DynamicTestModule)[Mytest1Component-> MatDialogRef]:StaticInjectorError(平台:core)[Mytest1Component-> MatDialogRef]:NullInjectorError:没有MatDialogRef的提供者!

要解决此问题,我在beforeEach部分中添加了Import语句:

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

//...

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ Mytest1Component ],
        imports: [MatDialogRef],
    })
    .compileComponents();
}));

现在我得到了这个新错误,我无法修复:

  

失败:模块'DynamicTestModule'导入了意外的值'MatDialogRef'。请添加@NgModule批注。

有人可以澄清我应该在哪里添加@NgModule批注,或者我做错了什么吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

您正在将MatDialogRef注入组件:

l = column(gridplot([[p1, column(t_slider, p3)]]), p2)

因此,测试床希望将与constructor(private dialogRef: MatDialogRef<Mytest1Component>) { } 相同的东西注入到测试床中。或者,您也可以提供一个provider

MockDialogueService

答案 1 :(得分:0)

使用:

imports: [MatDialogModule],

代替

答案 2 :(得分:-1)

我在spec.ts中也遇到过同样的问题,请使用xdescribe而不是describe。这解决了问题。