gridOptions.api имеет значение null, когда событие onGridReady срабатывает после проверки определения gridOptions.api в модульном тесте.

В моем событии onGridReady я назначаю api this.gridApi.

private onGridReady(gridReadyEvent: GridReadyEvent): void {
  this.gridApi = gridReadyEvent.api;
}

У меня есть метод, в котором я использую this.gridApi.

public getGridState(): GridState {
    if (this.gridApi) { 
      // code to get state
    }
}

Я пишу модульный тест для getGridState.

Модульный тест:

it('should be able to get state of grid', async () => {
  waitForGridApiToBeAvailable(component.gridOptions, () => {
    component.getGridState();
  });
});

Итак, чтобы убедиться, что this.gridApi определено, я использую waitForGridApiToBeAvailable, упомянутый в документ по модульному тестированию ag-Grid. Итак, это будет означать, что когда gridOptions.api определено, this.gridApi тоже будет, верно?

Проблема:

Когда я запускаю свой модульный тест, он вызывает component.getGridState() только после того, как component.gridOptions.api определено, но this.gridApi равно undefined в getGridState().

Кроме того, меня больше смущает то, что onGridReady() вызывается после вызова getGridState(), и когда я утешил this.gridOptions.api, оказалось, что это null. Как this.gridOptions.api может быть null, когда getGridState() вызывается из модульного теста после проверки определения component.gridOptions.api, а onGridReady() вызывается после getGridState()?

Примечание. Я попытался объяснить как можно более ясно. Дайте мне знать, если что-то нуждается в дополнительных пояснениях.


person Community    schedule 26.09.2020    source источник
comment
Я думаю, что некоторое время назад я ответил на что-то очень похожее, посмотрите, поможет ли это :-) #55483100" title="модульное тестирование сетки в angular 2"> stackoverflow.com/questions/42299256/   -  person Dince12    schedule 26.09.2020
comment
@ Dince12 Я уже использую fixture.detectChanges().   -  person    schedule 26.09.2020
comment
Вероятно, вам нужно привязать onGridReady к вашему модулю модульного тестирования. Попробуйте выполнить console(this) внутри onGridReady, чтобы убедиться, что это именно то, что вы думаете.   -  person Chris    schedule 27.09.2020