2016-09-15 4 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