Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何测试调用角度为6+;的可观察对象的拦截器;?_Angular_Unit Testing_Angular Http Interceptors_Angular Unit Test - Fatal编程技术网

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()
之后调用
勾选()
,这似乎有效。我将进一步挖掘,看看是否有更直观的方法…谢谢提醒!