2016-09-15 13 views
0

私はAngularFire2を使用しています。テストを実行するときにこの例外が発生します。私はそれが機能であるため、AngularFireを注入することができないことを推測AngularFireのプロバイダがありません

import {inject, TestBed} from '@angular/core/testing'; 
import {FIREBASE_PROVIDERS, defaultFirebase, AngularFire} from 'angularfire2'; 

describe('stock data service',() => { 
    beforeAll(() => { 
     const config = { 
      apiKey: "123", 
      authDomain: "123.firebaseapp.com", 
      databaseURL: "https://123.firebaseio.com", 
      storageBucket: "123.appspot.com", 
     }; 
     TestBed.configureTestingModule({ 
      providers: [FIREBASE_PROVIDERS, defaultFirebase(config)] 
     }); 
    }); 

    it('should connect to Firebase', inject([AngularFire], (af : AngularFire) => { 
     expect(af.database).not.toBe(null); 
    })); 

}); 

これは私のテストはどのように見えるのですか?

答えて

1

'beforeAll'を 'beforeEach'に置き換えると問題が解決します。

しかし、なぜこの変更が有効になったのか説明できますか?

は、ここで私が見つけたものです:

は私がconfigureTestingModuleが呼び出された後、余分なプロバイダがグローバルテストベッドに追加されますことがわかります。しかし、beforeAllでは、後でTestBed.execute(tokens: any[], fn: Function)が呼び出されたときにこれらの余分なプロバイダが何らかの形で失われるため、依存性インジェクタによって見つからない。

+1

角度[リセットするbeforeEach'呼び出し](https://github.com/angular/angular/blob/2.0.0/modules/%40angular/core/testing/testing.ts#L23-L28)を設定します。 'TestBed'です。そのため、 'beforeEach'で' TestBed.configureTestingModule'呼び出しを行う必要があります.- Angularの 'beforeEach'が' beforeAll'の後に呼び出され、あなたが設定した 'TestBed'がテストの前にリセットされています。 – cartant

関連する問題