Javascript 角度2可观察和承诺回调单元测试

Javascript 角度2可观察和承诺回调单元测试,javascript,unit-testing,angular,jasmine,rxjs,Javascript,Unit Testing,Angular,Jasmine,Rxjs,我在Angular 2服务中有一个方法,它获取特定用户帐户的所有详细信息(即已登录的帐户),并返回一个可观察的 (我正在使用AngularFire2进行身份验证,不管它值多少钱) 如您所见,getData方法使用getAuth方法,该方法返回身份验证状态(作为可观察的),而getToken方法(返回承诺)则使用该方法来获取令牌,该令牌用于填充授权头并执行http请求。(我知道我的代码可能需要重构,如果有任何反馈,我将不胜感激) 据我所知,我必须从getToken拒绝中做出承诺,并测试我的可观察对

我在Angular 2服务中有一个方法,它获取特定用户帐户的所有详细信息(即已登录的帐户),并返回一个可观察的

(我正在使用AngularFire2进行身份验证,不管它值多少钱)

如您所见,
getData
方法使用
getAuth
方法,该方法返回身份验证状态(作为可观察的),而
getToken
方法(返回承诺)则使用该方法来获取令牌,该令牌用于填充
授权
头并执行http请求。(我知道我的代码可能需要重构,如果有任何反馈,我将不胜感激)

据我所知,我必须从
getToken
拒绝中做出承诺,并测试我的可观察对象是否会抛出


非常感谢您的帮助或反馈。

我既不使用
jasmine
也不使用AngularFire2,因此我无法确定您到底要做什么,但从您的代码中可以明显看出
this.getToken(authState)
返回一个
承诺

问题是这个
Promise
类来自哪个库(也称为您正在使用的polyfill)

据我所知,的实现应该使用try-catch包装回调调用,因此如果
中的回调(…)
抛出异常,承诺将传播到
catch()
。因此,我猜您可能会使用一些格式错误的JSON来伪造来自
this.http.get('myendpoint/')
的响应,这将导致
response.JSON()
出现错误

第二件事是
catch()
的内部回调:

这实际上没有任何作用。没有返回语句,
Observable.throw()
需要出现在Observable链中才能执行某些操作。请注意,此
.catch()
方法来自Promise类,而不是Observable类

如果希望它将错误实际传播给观察者,则必须显式调用:

.catch((error: Error) => {
    o.error(error);
});

可能如果错误冒泡到Observable.create()
上,它也会传递给观测者,对此我不确定。

我也有类似的问题,然后我使用了Observable.from:

spyOn(service, 'function').and.returnValue(Observable.fromPromise(Promise.reject({})));
您在Promise.reject(…)和.returnValue(Observable.throw(…).toPromise())中返回了错误?您可以使用
Observable.map将其线性化,一步一步地进行,而不是增加嵌套,根据需要将
从promise
转换为promise
.catch((error: Error) => {
    Observable.throw(new Error(`Error: ${error}`));
});
.catch((error: Error) => {
    o.error(error);
});
spyOn(service, 'function').and.returnValue(Observable.fromPromise(Promise.reject({})));