Angular 角度6:如何为mat对话框编写jasmine测试规范

Angular 角度6:如何为mat对话框编写jasmine测试规范,angular,karma-jasmine,angular-unit-test,Angular,Karma Jasmine,Angular Unit Test,我试图为mat dialog编写一个测试规范,但没有成功,问题是它是由函数调用的。怎么做?谢谢你的帮助。 这是我的密码 closeDialogCancelButton(){ if(this.editFormData.dirty){ 让dialogRef=this.dialogCancel.open(dialogCancel, { 宽度:'250px', disableClose:对, 数据: { id:'1' } }); dialogRef.afterClosed().subscribe(结果=

我试图为mat dialog编写一个测试规范,但没有成功,问题是它是由函数调用的。怎么做?谢谢你的帮助。 这是我的密码

closeDialogCancelButton(){
if(this.editFormData.dirty){
让dialogRef=this.dialogCancel.open(dialogCancel,
{
宽度:'250px',
disableClose:对,
数据:
{
id:'1'
}
});
dialogRef.afterClosed().subscribe(结果=>{
如果(结果)
this.dialog.close();
});
}否则
this.dialog.close();
}

我通过模仿
MatDialog
解决了同样的问题。i、 e:

import { of } from 'rxjs';

export class MatDialogMock {
    open() {
        return {
            afterClosed: () => of({ name: 'some object' })
        };
    }
}
然后在您的测试床配置中提供这个模拟


providers:[{provide:MatDialog,useClass:MatDialogMock}]
扩展Danilo的答案,使用Angular 7,您可以测试
MatDialog
,如下所示

测试方法为:

openExport() {
    const dialogRef = this.matDialog.open(ExportComponent, {
        data: {}
    });

    dialogRef.afterClosed().subscribe(result => {
        if (result !== 'cancel') {
            this.export(result);
        }
    });
}
使用我的
mat对话框关闭
操作,定义如下:

<div mat-dialog-actions>
    <button mat-button [mat-dialog-close]="'cancel'">Cancel</button>
    ...
</div>
记住提供您的
测试台。使用
matDialog
MAT\u DIALOG\u数据配置测试模块

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

你能添加所有组件代码吗?我不能提供所有组件代码,但我认为这足以在jasmine中创建规范。我尝试了很多次,但由于指向其他组件而出现了一些错误。这是什么?dialogCancel是服务吗?它只是matdialog的一个对象
providers: [
  { provide: MatDialogRef, useValue: {} },
  { provide: MAT_DIALOG_DATA, useValue: {} }
]