您如何在Angular测试中强制关闭垫对话框?

时间:2018-12-18 12:52:34

标签: angular jasmine modal-dialog karma-jasmine angular-material2

场景:

  • 我有一个组件,该组件是另一个组件的包装器,包装器组件调用this.dialog.open(otherComponent)
  • 在包装器组件的“创建”测试中,弹出对话框 在测试浏览器中打开,并在 测试套件,遮盖了它下面的所有内容甚至测试 结果。
    • 如何强制关闭它?
    • 我尝试过dialog.close(), dialog.closeAll(),,我尝试过创建模拟对话框并关闭 那,但是似乎什么都不起作用,因为原始组件在 测试不会关闭该对话框。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

如果需要,这是我创建的用于创建对话框服务的新模拟的函数:

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

通过致电

const mock = matDialogMock();

您可以创建模拟的新实例,并将其注入测试中。

答案 1 :(得分:0)

 {provide: MatDialog, useValue: {}}

我以这种方式嘲笑了MatDialogRef,但没有嘲笑MatDialog。感谢@trichetriche指出这一点。