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: {}}