比方说,我有一个订阅服务功能的组件:测试误差的情况下,在服务观测
export class Component {
...
ngOnInit() {
this.service.doStuff().subscribe(
(data: IData) => {
doThings(data);
},
(error: Error) => console.error(error)
);
};
};
的订阅调用需要两个匿名函数作为参数,我已经成功地建立了一个工作单元测试数据功能,但Karma不会接受错误1的覆盖范围。
我试图刺探console.error功能,抛出一个错误,然后期待有被称为间谍但这完全不是那么回事做到这一点。
我的单元测试:
spyOn(console,'error').and.callThrough();
serviceStub = {
doStuff: jasmine.createSpy('doStuff').and.returnValue(Observable.of(data)),
};
serviceStub.doStuff.and.returnValue(Observable.throw(
'error!'
));
serviceStub.doStuff().subscribe(
(res) => {
*working test, can access res*
},
(error) => {
console.error(error);
console.log(error); //Prints 'error!' so throw works.
expect(console.error).toHaveBeenCalledWith('error!'); //Is true but won't be accepted for coverage.
}
);
什么是用于测试的匿名功能,如这些最佳做法?确保测试覆盖率的最低标准是多少?
你的测试没有意义;你正在替换你说你想测试的回调。只要测试'subscribe'在发生错误时调用其第二个参数就不会测试您的代码,它就会测试框架,这是一种反模式。你也可以为连续线上的模拟呼叫提供两种不同的结果。 – jonrsharpe
好的,那么测试它的好方法是什么?在单独的块中抛出一个错误? – user3656550
你需要调用实际的实现,但是你没有足够的[mcve]来猜测如何实现。 – jonrsharpe