原始代码中的.catch未捕获Jasmine .and.throwError()

时间:2018-03-08 12:01:48

标签: javascript testing jasmine throw

我正在为一个函数编写测试,并且必须触发该函数的.catch部分,但Jasmine的间谍由于某种原因无法做到这一点。 待测方法:

error

}

doStuff()返回一个Promise(因此是.catch-Setup),但是对于这个测试,它应该抛出一个错误。

这是我的测试:

foo(){
doStuff()
.catch((error) => {
    //stuff I still have to test
    bar()
})

});

我接近这个错误的方式是什么?这是Jasmine的错误吗? (谷歌没有找到任何东西) [我坚持(完成)设置,因为几乎所有其他测试都是异步的,我想保持风格]

[我无法更改要测试的代码]

2 个答案:

答案 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'));