【发布时间】:2020-11-11 02:44:44
【问题描述】:
我在constructor() 中有一项服务进行订阅并调用函数:
constructor(private router: Router) {
this.router.events.subscribe((e) => {
if (e instanceof RouterEvent) {
this.closeModal();
}
});
在我的测试中我尝试过:
describe('ModalService', () => {
let service: ModalService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule],
providers: [
{
provide: Router,
useClass: routeStub,
},
],
});
router = TestBed.get(Router);
service = TestBed.get(ModalService);
fit('should close modal when is a instance of RouterEvent', async () => {
spyOn(service, 'closeModal');
await router.navigate(['/']);
expect(service.closeModal).toHaveBeenCalled();
});
})
我的路由器存根:
export const routeStub = (): Partial<Router> => {
const events = of(new RouterEvent(1, 'test'));
return {
events,
navigate: (commands: any[], extras?: NavigationExtras) => {
return new Promise<boolean>((resolve, reject) => resolve(true));
},
};
};
当我在我的closeModal() 中添加一个console.log('test') 时,我的消息test 正在打印,但我的期望离开返回错误消息:
预期的间谍 closeModal 已被调用。
【问题讨论】: