Тестирование хука жизненного цикла ngOnChanges в Angular 2

Учитывая следующий код, я пытаюсь проверитьngOnChanges Крючок жизненного цикла Angular2:

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

К сожалению, тест не проходит с сообщениемExpected spy ngOnChanges to have been called. Я знаю, что я мог бы просто проверить содержимое HTML-элемента в этом примере, но у меня есть некоторый код, который нужно протестировать внутри ловушки жизненного цикла ngOnChanes, так что это не решение для меня. Я тоже не хочу звонитьtestComponent.ngOnChanges({someMockData}); в тесте напрямую.

Как я могу установитьTestComponent.value из теста, так чтоngOnChanges называется?

Ответы на вопрос(3)

Ваш ответ на вопрос