使用karmajasmine对路由器navigateByUrl的功能进行单元测试



我正在尝试对以下函数进行单元测试,该函数具有router navigationByUrl,但无法执行。然后阻止

.ts代码:

back(){ 
this.router.navigateByUrl('/routepath').then(() => {
Object.keys(['column']).forEach((obj, val) => {
myService.setDefaultGroup();
});
});
}

以下是我在spec.ts 中尝试的内容

class MockRouter {
navigateByUrl = () => {
return {
then: () => {}
}
}
}
configureTestSuite(() => {
TestBed.configureTestingModule({
providers: [{ provide: Router, useClass: MockRouter } ]
})
});
describe('should call back', () => {
it('should call Router.navigateByUrl', inject([Router], (router: Router) => {
const spy = spyOn(router, 'navigateByUrl');
component.back();
}));
});

收到的输出是多少

类型错误:无法读取未定义的的属性'then'

预期:

测试用例应执行

我正在使用因果报应和茉莉花来单元测试这个。如果我遗漏了什么,请帮帮我

当您spyOn一个方法时,它会将其截断以返回undefined。

您需要使用.and.callThrough()来避免丢失实现细节。

尝试:

describe('should call back', () => {
it('should call Router.navigateByUrl', inject([Router], (router: Router) => {
const spy = spyOn(router, 'navigateByUrl').and.callThrough();
component.back();
}));
});

最新更新