如何测试角度材料对话框?

Posted

技术标签:

【中文标题】如何测试角度材料对话框?【英文标题】:How to test angular material dialog? 【发布时间】:2018-06-17 18:53:39 【问题描述】:

我有一个正在尝试测试的自定义对话框组件类。特别是我的关闭功能,这是

  close(): void 
    this.dialogRef.close();
  

dialogRef 被注入到该类的构造函数中,如下所示

 constructor(public dialogRef: MatDialogRef<CustomDialogComponent>,
              @Inject(MAT_DIALOG_DATA) public data: any) 
  

所以我的问题是,如何在我的规范测试文件中模拟 dialogRef 并测试其关闭功能?

我的项目使用 angular 5,angular material 5。

【问题讨论】:

【参考方案1】:

您不需要对此进行测试,因为您使用的库应该已经测试了它自己的组件(并非总是如此)。

但是,如果您需要使用关闭对话框引用的特定测试,请查看他们对此组件的测试,这应该可以帮助您编写自己的测试:

https://github.com/angular/components/blob/master/src/material/dialog/dialog.spec.ts#L186

【讨论】:

flush 是所有 observables 的答案,谢谢!【参考方案2】:

假设您询问的是使用对话框而不是对话框本身的测试组件,在您的测试用例中,添加

providers: [
      provide: MAT_DIALOG_DATA, useValue:  ,
      provide: MatDialogRef, useValue:  
 ]

这应该提供必要的依赖关系。

【讨论】:

不需要mock这些provider,正确的方式如上角源码所示

以上是关于如何测试角度材料对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何*保存*角度材料模态对话框的结果?

如何在我的项目中使角度材料 DIALOG 可共享?

最小化角度材质对话框

禁用在角度材料对话框区域外单击以关闭对话框(使用 Angular 版本 4.0+)

在角度材料 md 对话框中使用带有所需 ^form 的指令

剑道列过滤器内的角度材料日期选择器问题