没有MockDialogRef的提供者

时间:2019-02-11 20:21:39

标签: angular angular-material angular-testing

这是组件构造函数:

constructor(
  public dialogRef: MatDialogRef<TaskActionModalContainer>,
  @Inject(MAT_DIALOG_DATA) data
) {}

这是测试台:

TestBed.configureTestingModule({
  imports: [ MatDialogModule ],
  declarations: [ TaskActionModalContainer ],
  schemas: [
    CUSTOM_ELEMENTS_SCHEMA
  ],
  providers: [
    {
      provide: MatDialogRef,
      useValue: {},
    },
    {
      provide: MAT_DIALOG_DATA,
      useValue: {}
    }
  ]
})
.compileComponents();

这是错误:

StaticInjectorError(DynamicTestModule)[TaskActionModalContainer -> MatDialogRef]: 
  StaticInjectorError(Platform: core)[TaskActionModalContainer -> MatDialogRef]: 
    NullInjectorError: No provider for MatDialogRef!

我进行了上下搜索,到处都可以看到此NullInjector错误,但我仍在继续获取它。我以为有角的大师可以很快解决这个问题。

帮助!

编辑:

我也使用useClass失败了。

有趣的是,我也有这个:

  beforeEach(inject(
    [
      MatDialogRef,
      MAT_DIALOG_DATA
    ],
    (
      dialogRef,
      dialogData
    ) => {
    console.log(dialogRef);
    console.log(dialogData);
  }));

运行测试时,我看到了那些console.log。...恰好在向我显示TestBed.createComponent处的错误

编辑#2-我觉得这是因为这是一个entryComponent,我不知道这是什么意思,但这是一个。我有一个ModalContainer可以弹出此窗口(所以我想它是动态创建的)-有帮助吗?

我误以为是骗人的,我把这与单元测试有关,所以答案有些微妙。

1 个答案:

答案 0 :(得分:0)

对于在单元测试中遇到此问题的其他人,评论中的答案非常接近回答我的问题,但真正的问题是,规范文件和组件文件都必须从同一位置导入MatDialogRef和MAT_DIALOG_DATA- @angular/material/dialog

我的组件看起来像这样:

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

我的测试如下:

import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';

更改我的组件导入以匹配我的测试就可以解决它!