我正在为一个函数编写测试,并且必须触发该函数的.catch部分,但Jasmine的间谍由于某种原因无法做到这一点。 待测方法:
error
}
doStuff()返回一个Promise(因此是.catch-Setup),但是对于这个测试,它应该抛出一个错误。
这是我的测试:
foo(){
doStuff()
.catch((error) => {
//stuff I still have to test
bar()
})
});
我接近这个错误的方式是什么?这是Jasmine的错误吗? (谷歌没有找到任何东西) [我坚持(完成)设置,因为几乎所有其他测试都是异步的,我想保持风格]
[我无法更改要测试的代码]
答案 0 :(得分:1)
我认为我遇到了与您相似的问题。这是我解决的方法
Spätes Frühstück
以下是对signIn方法的调用:
import { throwError } from 'rxjs';
it(`...`, fakeAsync(() => {
spy = spyOn(authService, 'signIn').and.returnValue(throwError(loginError));
/* do things */
expectSnackbar('error', loginError);
expect(authService.ensureLogin).toHaveBeenCalled();
}));
以及在SignIn内引发的错误外观
return this.authService
.signIn(payload.email, payload.password)
.map((userId: string) => {
// Whatever
})
.catch(error => {
// Do something with the error
});
答案 1 :(得分:1)
如果调用and.throwError(...);
,则会在测试方法中引发错误。
您可以尝试返回Promise拒绝:
spyOn(object, 'foo').and.rejectWith(new Error('Test Error'));