测试未能使用Jasmine订阅Observable

时间:2017-09-16 10:15:33

标签: angular jasmine karma-jasmine angularfire2

在我使用AngularFire2的Angular2应用中,我有AuthService尝试匿名使用Firebase进行身份验证。

我正在尝试编写一个测试,希望订阅AngularFireAuth的{​​{1}}失败(可观察序列的异常终止)并抛出错误。

我已经问了一个似乎是similar question的东西,但是,在这里我正在测试“可观察序列的特殊终止” - 一个灾难性的失败,例如:当第三方提供商Firebase关闭时。

这与我正在测试被拒绝的承诺的其他(相关)问题是分开的。

以下是简化的authState

AuthService

这是我的测试规范:

import { Injectable } from '@angular/core';

import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Rx';

@Injectable()
export class AuthService {
  private authState: firebase.User;

  constructor(private afAuth: AngularFireAuth) { this.init(); }

  private init (): void {
    this.afAuth.authState.subscribe((authState: firebase.User) => {
      if (authState === null) {
        this.afAuth.auth.signInAnonymously()
          .then((authState) => {
            this.authState = authState;
          })
          .catch((error) => {
            throw new Error(error.message);
          });
      } else {
        this.authState = authState;
      }
    }, (error) => {
      throw new Error(error.message);
    });
  }
}

我不确定这是否可能,或者是否需要 - 因为这将是一个非常特殊的情况。如果我要开始测试,虽然我希望测试尽可能全面和防水!谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我需要监视mockAngularFireAuth的{​​{1}}并返回一个抛出错误的Observable。当我在authState函数中订阅mockAngularFireAuth.authState时,我应该预期错误,la:

onError