den folgenden Code Da ich versuche, den ngOnChanges
Lifecycle Haken von Angular2 zu testen:Testing ngOnChanges Lifecycle Haken in Angular 2
import {
it,
inject,
fdescribe,
beforeEachProviders,
} from '@angular/core/testing';
import {TestComponentBuilder} from '@angular/compiler/testing';
import {Component, OnChanges, Input} from '@angular/core';
@Component({
selector: 'test',
template: `<p>{{value}}</p>`,
})
export class TestComponent implements OnChanges {
@Input() value: string;
ngOnChanges(changes: {}): any {
// should be called
}
}
fdescribe('TestComponent',() => {
let tcb: TestComponentBuilder;
beforeEachProviders(() => [
TestComponentBuilder,
TestComponent,
]);
beforeEach(inject([TestComponentBuilder], _tcb => {
tcb = _tcb;
}));
it('should call ngOnChanges', done => {
tcb.createAsync(TestComponent).then(fixture => {
let testComponent: TestComponent = fixture.componentInstance;
spyOn(testComponent, 'ngOnChanges').and.callThrough();
testComponent.value = 'Test';
fixture.detectChanges();
expect(testComponent.ngOnChanges).toHaveBeenCalled();
done();
}).catch(e => done.fail(e));
});
});
Leider ist der Test mit der Nachricht nicht Expected spy ngOnChanges to have been called.
Ich weiß, dass ich nur den Inhalt überprüfen könnte das HTML-Element in diesem Beispiel, aber ich habe etwas Code, der innerhalb des ngOnChanes-Lebenszyklus-Hooks getestet werden muss, also ist das keine Lösung für mich. Ich möchte auch testComponent.ngOnChanges({someMockData});
im Test nicht direkt anrufen. Wie kann ich den TestComponent.value
von einem Test so einstellen, dass ngOnChanges
aufgerufen wird?
I don Ich denke, du solltest einen Test für eckige, eckige Teams machen. Sie müssen nur herausfinden, warum, um Ihre Geschäfts-Codes außer dem Rahmen selbst zu testen. –
Ich möchte meinen Businesscode testen, der innerhalb der 'ngOnChanges'-Funktion ist – user1448982
Wenn Sie e2e testen müssen, hilft' http: // www.protractortest.org' –