7

別のサービスを使用するコンポーネントをテストしようとしています。そして、サービスのモックを提供してコンポーネントを分離したいと考えています。addprovidersRC5 より前は、非推奨になり、次の RC で削除されるものを簡単に使用できます。代わりに、を使用する必要がありTestBedます。何らかの理由でモック angular を提供すると、モックが依存するサービスを探し続けます。を投げますDI exception。すべての依存関係を提供すると、テストは機能しますが、テスト スイートごとに繰り返したくありません。そして、これは基本的なオブジェクト指向の原則を破ります。私のテストスイート:

describe('Component: DummyRestApi', () => {

  class DummyRestApiTestService {

    GetAll() {

      return Rx.Observable.create(observer => {

        let data:Data[] = [];

        data.push({
          id: 0,
          data: 'data'
        });

        observer.next(data);
        observer.complete();

      });
    }

    Add(data) {
    }
  }
  let fixture;
  let myMockWindow:Window;
  // ToDo use the mocks
  beforeEach(() => {
    myMockWindow = <any> {location: <any> {hostname: '127.0.0.1'}};
    TestBed.configureTestingModule({
      declarations: [DummyRestApiComponent],
      providers: [
        // ServerAddressResolverService,
        DummyRestApiComponent,
        // ConfigurationService,
        {provide: DummyRestApiService, useClass: DummyRestApiTestService},
        // {provide: Window, useValue: myMockWindow}
      ],
      imports: [FormsModule, HttpModule]
    });
    TestBed.compileComponents().catch(error => console.error(error));


    // addProviders([
    //   DummyRestApiComponent,
    //   {provide: DummyRestApiService, useClass: DummyRestApiTestService},
    // ]);
  });


  describe('Initializing', () => {

    beforeEach(async(() => {
      console.log('Compiling');
      TestBed.compileComponents().catch(error => console.error(error));
      console.log('Compiling again');
    }));

    it('should create an instance', async(() => {
        var fixture = TestBed.createComponent(DummyRestApiComponent);
        fixture.detectChanges();
        expect(fixture.debugElement.componentInstance).toBeTruthy();
      }
    ));

});

角度 2.0.0-RC5

4

2 に答える 2

6

Patrick Ineichens の回答は提供を使用していることに注意してください。これは非推奨です。

 providers: [provide(TodoService, { useValue: this.service })]

代わりに読む必要があります:

 providers: [{provide:TodoService, useValue: this.service }]
于 2016-08-26T16:10:48.040 に答える