Wie verspotten Sie den AngularFire 2-Dienst im Komponententest?

Ich versuche, Unit-Tests für eine Angular 2-Beispielanwendung mit AngularFire 2-Authentifizierung einzurichten. Die Komponente ist recht einfach:

import { Component } from '@angular/core';
import { AngularFire, AuthProviders } from 'angularfire2';

@Component({
  moduleId: module.id,
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css']
})
export class AppComponent {
  isLoggedIn: boolean;

  constructor(public af: AngularFire) {
    this.af.auth.subscribe(auth => {
      if (auth) {
        this.isLoggedIn = true;
      } else {
        this.isLoggedIn = false;
      }
    });
  }

  loginWithFacebook() {
    this.af.auth.login({
      provider: AuthProviders.Facebook
    });
  }

  logout() {
    this.af.auth.logout();
  }
}

lles, was ich tue, ist das Wickeln um daslogin undlogout Methoden in AngularFire Also habe ich darüber nachgedacht, mit einem Mock zu prüfen, ob die Methoden aufgerufen wurden, aber ich bin mir nicht sicher, wo ich anfangen soll. Ich habe in meiner Spezifikationsdatei Folgendes versucht:

import { provide } from '@angular/core';
import { AngularFire } from 'angularfire2';
import {
  beforeEach, beforeEachProviders,
  describe, xdescribe,
  expect, it, xit,
  async, inject
} from '@angular/core/testing';
import { AppComponent } from './app.component';

spyOn(AngularFire, 'auth');

beforeEachProviders(() => [
  AppComponent,
  AngularFire
]);

describe('App Component', () => {
  it('should create the app',
    inject([AppComponent], (app: AppComponent) => {
      expect(app).toBeTruthy();
    })
  );

  it('should log user in',
    inject([AppComponent], (app: AppComponent) => {
      expect(app.fb.auth.login).toHaveBeenCalled();
    })
  );

  it('should log user out',
    inject([AppComponent], (app: AppComponent) => {
      expect(app.fb.auth.logout).toHaveBeenCalled();
    })
  );
});

Allerdings bin ich mir nicht sicher, wie ich das verspotten solllogin undlogout Methoden, da sie Teil des @ siauth Eigenschaft, gibt es eine Möglichkeit, @ zu verspottauth und auch die Rückkehrlogin undlogout Methoden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage