小编Jul*_*ral的帖子

无法使用 Karma 和 Jasmine 测试 Angular http 拦截器

我正在尝试测试 http 拦截器,但找不到任何方法。

我不知道为什么 url 不匹配,因为我的令牌记录在控制台中并且请求 url 也是相同的。我在没有拦截器的情况下使用这种方法测试了我所有其他的 http 服务,一切都通过了......

这是拦截器类,代码工作并在每个请求中添加我的不记名令牌,它使用在测试中模拟的 Ionic Platform 本机类:

@Injectable()
export class AddHeaderInterceptor implements HttpInterceptor {

  public constructor(
      private auth: AuthService, private platform: Platform, 
      private config: ConfigurationService
  ) {}

  public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.debug('req', req.url);
    return Observable.fromPromise(this.platform.ready())
      .switchMap(() => Observable.fromPromise(this.auth.getToken()))
      .switchMap((tokens: TokenCacheItem[]) => {
        const baseUrl = new RegExp(this.config.getValue('baseUrl'), 'g');
        if (! req.url.match(baseUrl)) {
          return Observable.of(null);
        }
        if (tokens.length > 0) {
          return Observable.of(tokens[0].accessToken);
        }
        return Observable.throw(null);
      })
      .switchMap((token: string) => { …
Run Code Online (Sandbox Code Playgroud)

unit-testing typescript karma-jasmine ionic3 angular

4
推荐指数
1
解决办法
3885
查看次数