2017-06-12 3 views
0

Ich möchte eine einfache Komponente testen, die einige Abhängigkeiten haben. So unter anderem ich einige Anbieter zu bieten haben beschreiben ('AccountLookupComponent',() => { let Komponente: AccountLookupComponent; let Aufnahme: ComponentFixture enter code here;Angular 2 Unit Test Fehler: Kann nicht alle Parameter auflösen DecoratorFactory :(?)

beforeEach(async(() => { 
     TestBed.configureTestingModule({ 
      declarations: [ 
       TestComponentWrapper, 
       AccountLookupComponent 
      ], 
      schemas: [CUSTOM_ELEMENTS_SCHEMA], 
      imports: [HttpModule], 
      providers: [AccountLookupService, AuthHttp, AuthenticationService, AdalService, AdfsSecretService, CookieService, NgModule, 
       { provide: 'IAccountLookupClient', useClass: AccountLookupClient }, 
       { provide: 'IApiClient', useClass: ApiClient }, 
       { provide: 'ITimeoutService', useClass: TimeoutService }, 

      ] 

     }) 
      .compileComponents(); 

     fixture = TestBed.createComponent(TestComponentWrapper); 
     component = fixture.debugElement.children[0].componentInstance; 
     fixture.detectChanges(); 
    })); 

    it('should create',() => { 
     expect(component).toBeTruthy(); 
    }); 
}); 

@Component({ 
    selector: 'test-component-wrapper', 
    template: `<account-lookup filterCurrentAccount="true" 
           [useAccountIdSearch]="true" 
           [useCompactResults]="true" 
           (accountSelected)="null" 
           placeholder="Find account"> 
       </account-lookup>`, 

}) 
class TestComponentWrapper { 


} 

Antwort

0

Entfernen Sie NgModule von providers Array. Es ist Dekorateur. Sie sollten es nicht als Token verwenden.

export function makeDecorator(
    name: string, props?: (...args: any[]) => any, parentClass?: any, 
    chainFn?: (fn: Function) => void): (...args: any[]) => (cls: any) => any { 
    const metaCtor = makeMetadataCtor(props); 

    function DecoratorFactory(objOrType: any): (cls: any) => any { // => here is your provider 
+0

wenn ich NgModule entferne, gibts mir diesen Fehler Kein Provider für NgbModal! –

+0

Importieren Sie stattdessen NgbModule.forRoot() oder NgbModalModule.forRoot() – yurzui

0

Es gibt Zwei-Wege-Komponente mit den Anbietern zu testen

1. Inject die wirklichen Leistungen.

2. Verwenden Test verdoppelt (Stubs, Fakes, Spione oder Mocks).

Erste Methode Eine Komponente muss nicht mit realen Dienstleistungen injiziert werden, aber Sie können, wie das Beispiel etwas tun:

TestBed.configureTestingModule({ 
    declarations: [ ExampleComponent ], 
    providers: [ ExampleService ]] 
}); 

Die andere Methode ist Stubs Beispiel mit:

TestBed.configureTestingModule({ 
    declarations: [ ExampleComponent ], 
    // Provide a test-double instead 
    providers: [ {provide: ExampleService, useValue: exampleServiceStub }] 
}); 

// UserService from the root injector 
exampleService = TestBed.get(ExampleService); 
+0

siehe meinen Code –

+0

Sie versuchen, Decorator in Providers Array zu importieren. Warum fügst du NgModule zu Providern hinzu? Es sollte nur Dienste enthalten. – esso

+0

ich jetzt es; s Dekorator, aber es ist mir dieser Fehler ::: Inline-Vorlage: 0: 0 verursacht durch: Kein Anbieter für NgbModal! –

Verwandte Themen