Как издеваться над сервисом AngularFire 2 в модульном тестировании?

Я пытаюсь настроить модульные тесты для примера приложения Angular 2, используя AngularFire 2 auth, компонент довольно прост:

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();
  }
}

Все, что я делаю, это оборачиваюсь вокругlogin а такжеlogout методы в AngularFire, так что я думал об использовании макета для проверки, были ли вызваны методы, но я не уверен, с чего начать, я попытался сделать следующее в моем файле спецификации:

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();
    })
  );
});

Однако я не уверен, как издеватьсяlogin а такжеlogout методы, так как они являются частьюauth собственность, есть ли способ издеватьсяauth а также возвращениеlogin а такжеlogout методы?

Ответы на вопрос(1)

Ваш ответ на вопрос