Следите за методом компонента перед TestBed.createComponent () - PullRequest
0 голосов
/ 24 мая 2019

Я использую AG-Grid, который предоставляет метод обратного вызова для завершения инициализации таблицы.

Мне нужно убедиться, что этот метод вызывается после завершения инициализации таблицы, но я неуверен, какой способ пойти об этом.Перед тем, как создать компонент, необходимо следить за методом, потому что он уже был вызван без явного запуска в моем тесте.

Я попытался настроить шпиона, а затем заново создать компонент с помощью TestBed.createComponent() но я не думаю, что шпион работает, потому что он подключен к ранее созданному fixture.componentInstance.

Сетка:

<ag-grid-angular 
  id="strategyListGrid"
  [rowData]="strategyList$ | async"
  [columnDefs]="columnDefs"
  (gridReady)="onGridReady($event)">
</ag-grid-angular>

Функция компонента:

/**
 * Fetch GridApi from initialized ag-grid
 * @param params GridEvent fired from component when initialization has completed
 */
onGridReady(params: GridReadyEvent) {
    this.gridApi = params.api;
    this.triggerTableResize();
}

Код теста:

function setup() {
    let fixture = TestBed.createComponent(StrategyListComponent);
    let app = fixture.componentInstance;
    return { app, fixture };
}

it('should resize the table when grid is ready', () => {
    const { fixture, app } = setup();
    let resizeSpy = spyOn(app, 'onGridReady');
    let fixtureRefresh = TestBed.createComponent(StrategyListComponent);
    fixtureRefresh.detectChanges();
    fixtureRefresh.whenStable().then(() => {
        expect(resizeSpy).toHaveBeenCalled();
    });
});

Сбой при: Expected spy onGridReady to have been called

Я не уверен, что это правильный способ шпионить за компонентным методом до его создания.Но если это так, возможно, мне нужно использовать fakeAsync, чтобы подождать, пока не будет вызван метод.

РЕДАКТИРОВАТЬ: у меня есть рабочая версия, но она не очень чистая

it(
        'should resize the table when grid is ready',
        fakeAsync(() => {
            const { app, fixture } = setup();
            let gridReadySpy = spyOn(app, 'onGridReady');
            fixture.detectChanges();
            flush();

            fixture.whenStable().then(() => {
                fixture.detectChanges(); // Refresh template view
                flush();
                expect(gridReadySpy).toHaveBeenCalled();
            });
        })
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...