Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在角度测试中强制mat对话框关闭?_Angular_Jasmine_Modal Dialog_Karma Jasmine_Angular Material2 - Fatal编程技术网

Angular 如何在角度测试中强制mat对话框关闭?

Angular 如何在角度测试中强制mat对话框关闭?,angular,jasmine,modal-dialog,karma-jasmine,angular-material2,Angular,Jasmine,Modal Dialog,Karma Jasmine,Angular Material2,场景: 我有一个组件,它是另一个组件的包装器,包装器组件调用this.dialog.open(otherComponent) 在包装器组件的“it creates”测试中,对话框弹出 在测试浏览器中打开,并在测试期间保持在该浏览器中 测试套件,掩盖了它下面的一切,甚至是测试 结果。 我如何强制它关闭 我尝试了dialog.close(), dialog.closeAll(),我尝试创建一个模拟对话框并关闭它 但似乎没有任何效果,因为原始组件 测试不会关闭该对话框 如何解决此问题?如果需要

场景:

  • 我有一个组件,它是另一个组件的包装器,包装器组件调用
    this.dialog.open(otherComponent)
  • 在包装器组件的“it creates”测试中,对话框弹出 在测试浏览器中打开,并在测试期间保持在该浏览器中 测试套件,掩盖了它下面的一切,甚至是测试 结果。
    • 我如何强制它关闭
    • 我尝试了
      dialog.close(),
      dialog.closeAll(),
      我尝试创建一个模拟对话框并关闭它 但似乎没有任何效果,因为原始组件 测试不会关闭该对话框

如何解决此问题?

如果需要,我创建了一个函数来创建对话服务的新模拟:

matDialogMock(): SpyObj<MatDialog> {
    return createSpyObj<MatDialog>('MatDialog', {
      open: {
        afterOpened: () => of(undefined),
        afterClosed: () => of(undefined),
      } as any
    });
  }
您可以创建一个新的mock实例,并将其注入到测试中

 {provide: MatDialog, useValue: {}}

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

您应该模仿它,当您对组件进行单元测试时,不应该依赖于库。在界面测试中,只需模拟背景中的点击或关闭按钮,或Esc上的按键。正如我所说的,我已经试过模仿它。将尝试esc。您已尝试,但测试中仍会弹出对话框。所以不要尝试,要成功!好的,我会继续努力的!:)你是对的,我在嘲笑MatDialogRef,但不是MatDialog!让我试试这个,然后再打给你。
 {provide: MatDialog, useValue: {}}