【问题标题】:No provider for MockDialogRef没有 MockDialogRef 的提供者
【发布时间】:2019-07-05 10:00:24
【问题描述】:

这是组件构造函数:

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 弹出这个(所以我猜它是一个动态创建的) - 有什么帮助吗?

错误地将其作为一个骗子关闭,我的是关于单元测试的,所以答案有点微妙。

【问题讨论】:

  • 只使用构造函数创建一个 Stub 类,并在您的 providers 数组中用 useValue 替换 useClass: Stub
  • @MikeTung - 谢谢,但没有骰子,看我编辑。
  • 你试过this answer吗?我们在您的问题中没有看到文件 imports。
  • @ConnorsFan - 是的,我都试过了。我觉得我看到的错误实际上并不是问题所在。就好像我的提供者根本没有被接......
  • @ConnorsFan - 你明白了,我要对那个发表评论并关闭这个作为欺骗它。它有点细微差别 - 在我的测试中,我是从 @angular/material/dialog 导入的,但在我的组件中,我是从 @angular/material 导入的......为此损失了大约 5 个小时和很多神经。

标签: angular angular-material angular-test


【解决方案1】:

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

我的组件看起来像这样:

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

我的测试看起来像这样:

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

更改我的组件导入以匹配我的测试已修复它!

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 2012-07-07
    • 2018-06-29
    • 2018-08-11
    • 2017-06-04
    • 2018-04-24
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多