Angular 如何测试调用角度为6+;的可观察对象的拦截器;?
我构建了一个Angular 如何测试调用角度为6+;的可观察对象的拦截器;?,angular,unit-testing,angular-http-interceptors,angular-unit-test,Angular,Unit Testing,Angular Http Interceptors,Angular Unit Test,我构建了一个HttpInterceptor,它与Angular文档中的截取器非常相似 但是,我需要作为拦截器的一部分进行异步调用。我创建了一个简化版本的代码(但语义相同) 拦截器看起来像: 导出类AuthInterceptor实现HttpInterceptor{ 构造函数(私有会话:SessionService,私有配置:ConfigurationService){} 截取(请求:HttpRequest 然而,我很难测试这个 我的实际测试非常简单: it('应该为API调用添加授权头',()=>
HttpInterceptor
,它与Angular文档中的截取器非常相似
但是,我需要作为拦截器的一部分进行异步调用。我创建了一个简化版本的代码(但语义相同)
拦截器看起来像:
导出类AuthInterceptor实现HttpInterceptor{
构造函数(私有会话:SessionService,私有配置:ConfigurationService){}
截取(请求:HttpRequest
然而,我很难测试这个
我的实际测试非常简单:
it('应该为API调用添加授权头',()=>{
http.get('bar').subscribe();
expectOne(req=>req.headers.has('Authorization');
});
我已经正确地模拟了getToken()
和apiUrl
,以便apiUrl='bar'
和getToken()
返回Promise.resolve('foobar')
。
问题似乎只有在通过addAuth()
路径时才会出现。如果我测试计数器大小写,它会起作用:
it('不应为非API调用添加授权头',()=>{
http.get('baz').subscribe();
httpMock.expectOne(req=>!req.headers.has('Authorization');
});
因此,正如我在一篇评论中提到的,修复方法似乎是使用fakeAsync()
和tick()
,如下所示:
beforeach(()=>{
spyOn(sessionService,'getToken')。和.returnValue(Promise.resolve('foobar'));
});
它('应该为API调用添加授权头',fakeAsync(()=>{
http.get('bar').subscribe();
勾选();
expectOne(req=>req.headers.has('Authorization');
}));
虽然这是有道理的,但如果有人能澄清我为什么需要勾选()…我认为解决这个承诺就足够了。我确实尝试过使用
wait http.get().toPromise();
(并且使用async
关键字-而不是函数),但这不起作用。我从未使用过Observable,但subscribe
方法是异步的否?这可以解释为什么标头不可用。@SamuelVaillant这是一个很好的观点。但我只是遵循了。我认为这与一些未解决的承诺有关…因此,通过使用fakeAsync()包装
并在.subscribe()
之后调用勾选()
,这似乎有效。我将进一步挖掘,看看是否有更直观的方法…谢谢提醒!