2016-07-20 11 views
0

Ich habe einen sehr einfachen Beispieltest für ein Projekt auf der Grundlage von angular-cli erstellt. Das Problem, wie Sie aus dem Titel sehen können, ist, dass der TestComponentBuilder.createAsync() sein Versprechen nicht löst. Hier ist mein Code. Ich vermute, dass das Problem in der Konfigurationsdatei karma-test-shim.js liegt, aber ich bin mir nicht sicher. Das Ergebnis des Tests ist immer Erfolg, obwohl ich für meinen Test "expect (wahr) .toEqual (false)" gesetzt habe. Ich arbeite mit kantigen 2-RC4Angular-CLI TestComponentBuilder.createAsync() löst sein Versprechen nicht

import { 
beforeEach, 
beforeEachProviders, 
describe, 
expect, 
it, 
inject 
} from '@angular/core/testing'; 
import { ComponentFixture, TestComponentBuilder } from '@angular/core/testing'; 

import { Component } from '@angular/core'; 
import { By } from '@angular/platform-browser'; 

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

let builder: TestComponentBuilder; 
beforeEach(inject([TestComponentBuilder], function (tcb: TestComponentBuilder) { 
builder = tcb; 
})); 

it('should create the CollectionCounterWidgetComponent component', inject([],() => { 
return builder.createAsync(ComponentTestController) 
    .then((fixture: ComponentFixture<any>) => { 
    fixture.detectChanges(); 
    expect(true).toEqual(false); 
    }); 

})); 
}); 

@Component({ 
selector: 'test', 
template: ` 
<h1>why?</h1> 
` 
}) 
class ComponentTestController { 
} 

Antwort

0

In Winkel 2 RC4 Sie den inject Funktion Ihres asynchronen Test mit async wickeln müssen. Dies führt Ihren Test in einem AsyncTestZoneSpec und stellt sicher, dass alle asynchronen Aufrufe innerhalb dieser Zone abgeschlossen sind.

In Ihrem Fall sollten Sie import {async} from '@angular/core/testing' und Ihren Test ändern:

it('should create the CollectionCounterWidgetComponent component', async(inject([],() => { 

    builder.createAsync(TestControllerComponent) 
     .then((fixture: ComponentFixture<any>) => { 
     fixture.detectChanges(); 
     expect(true).toEqual(false); 
     }); 

    })) 
); 

Jetzt Ihr Test wird wie erwartet ausfallen. Sie brauchen auch keine return-Anweisung (z. B. return builder ...)

0

Ok Michael, du hast recht, das war meine Schuld, aber das Problem bleibt. Ich habe ein anderes Projekt mit angular-cli erstellt, nur um ein sauberes Projekt zu haben, mit dem ich arbeiten konnte und ich habe den folgenden sehr einfachen Test erstellt.

import { 
async, 
inject, 
describe, 
it, 
expect, 
TestComponentBuilder, 
ComponentFixture 
} from '@angular/core/testing'; 
import { Component } from '@angular/core'; 

import { AppComponent } from './app.component' ; 

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

it('should create an instance', async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { 
    tcb.createAsync(AppComponent) 
    .then(fixture => { 
    expect(true).toBe(false); 
    }) 
}))); 
}); 

Aber die Ausführung des Tests ist erfolgreich. Ich muss erwähnen, dass angular-cli standardmäßig RC3 in der aktuellen Version verwendet und ich die Version von angular auf RC4 aktualisiert habe. Ich habe den obigen Test im selben Projekt mit "injectAsync" anstelle von "async (inject .." und angular RC3 getestet und funktioniert in diesem Fall richtig. Danke

Verwandte Themen