Angular 2 TestBed with mocks

Ich versuche, eine Komponente zu testen, die einen anderen Dienst verwendet. Und ich möchte die Komponente isolieren, indem ich einen Schein für den Dienst bereitstelle. Vor RC5 kann ich einfach @ benutzaddproviders, das jetzt veraltet ist und vom nächsten RC entfernt wird. Stattdessen muss ich das @ verwendTestBed. Wenn ich den Scheinwinkel aus irgendeinem Grund zur Verfügung stelle, halten Sie nach den Diensten Ausschau, von denen der Schein abhängt. Und wirft einDI exception. Wenn ich alle Abhängigkeiten angegeben habe, funktioniert der Test, ich möchte mich jedoch nicht für jede Testsuite wiederholen. Und dies verstößt gegen grundlegende OO-Prinzipien. Meine Testsuite:

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

});

Angular 2.0.0-RC5

Antworten auf die Frage(4)

Ihre Antwort auf die Frage