如何在 Angular 测试中强制关闭 mat-dialog?

How do you force a mat-dialog to close in an Angular test?

场景:

我该如何解决这个问题?

这是我创建的一个函数,如果需要,可以创建一个新的对话服务模拟:

matDialogMock(): SpyObj<MatDialog> {
    return createSpyObj<MatDialog>('MatDialog', {
      open: {
        afterOpened: () => of(undefined),
        afterClosed: () => of(undefined),
      } as any
    });
  }

通过调用

const mock = matDialogMock();

您创建了一个新的 mock 实例并将其注入到您的测试中。

 {provide: MatDialog, useValue: {}}

我曾以这种方式嘲笑过 MatDialogRef,但不是 MatDialog。感谢@trichetriche 指出这一点。