如何在 Angular 测试中强制关闭 mat-dialog?
How do you force a mat-dialog to close in an Angular test?
场景:
- 我有一个组件,它是另一个组件的包装器,包装器组件调用
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
});
}
通过调用
const mock = matDialogMock();
您创建了一个新的 mock 实例并将其注入到您的测试中。
{provide: MatDialog, useValue: {}}
我曾以这种方式嘲笑过 MatDialogRef,但不是 MatDialog。感谢@trichetriche 指出这一点。
场景:
- 我有一个组件,它是另一个组件的包装器,包装器组件调用
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
});
}
通过调用
const mock = matDialogMock();
您创建了一个新的 mock 实例并将其注入到您的测试中。
{provide: MatDialog, useValue: {}}
我曾以这种方式嘲笑过 MatDialogRef,但不是 MatDialog。感谢@trichetriche 指出这一点。