Ich arbeite an einer Angular 2-rc3-Anwendung und ich habe einige Untestests eingerichtet und sie arbeiten, yay! Ich verstehe einfach nicht, warum sie so geschrieben werden müssen, wie sie es tun. Und noch erstaunlicher, alltheexamplesIsee haben den gleichen Ansatz. Insbesondere sind diese Fragen auf der Spitze meiner Liste:Using Angular 2 TestComponentBuilder verwirrt mich
Warum ist die
TestComponentBuilder
in jedem Unittest konfiguriert?it('shows list of blog items by default', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb .overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then((fixture) => { // actual test code }); });
Das ist schon sieben Zeilen Code extra pro Unittest und die Lesbarkeit meines Codes leidet viel von diesem. Ich habe versucht, setze diese in einem
beforeEach()
:beforeEach(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { console.log('beforeEach'); return tcb.overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then(fixture => { // this never gets printed console.log('in then:', fixture.componentInstance); }); }));
aber Karma scheint nicht in der Lage zu sein, den asyncness zu handhaben, alles in den
then
einfach nicht ausgeführt werden soll. Ist das ein Fehler oder ist das beabsichtigt, sollen wir es nicht so machen?Warum muss die Erstellung dieser Komponente asynchron erfolgen? Es gibt eine
createSync()
auf der TestComponentBuilder class, können wir das nicht verwenden? Natürlich habe ich es ausprobiert und festgestellt, dass sich die Funktionssignaturen unterscheiden:createAsync(rootComponentType: Type) : Promise<ComponentFixture<any>>
undcreateSync(componentFactory: ComponentFactory<C>) : ComponentFixture<C>
. Warum brauchen wir hier eine Komponentenfabrik? Warum brauchen wir sie nicht, wenn wir die Komponente async erstellen? // Update: RC4 ist out undcreateSync()
akzeptiert jetzt einen Typ. Groß.
Meine Vernunft danke Ihnen schon!
Update: Das Changelog für RC4 enthält diese brechende Änderung: 'Compiler: TestComponentBuilder.createSync nimmt jetzt einen Komponententyp und löst aus, wenn nicht alle Templates inline sind, die zuvor über createAsync kompiliert wurden. –