Angular модульный тест не инициализирует ag-Grid - PullRequest
3 голосов
/ 18 марта 2020

Я пытаюсь выполнить модульное тестирование компонента, содержащего ag-Grid, но функция onGridReady никогда не вызывается, поэтому все тесты, включающие ag-Grid, завершаются неудачно. Как я могу сделать так, чтобы onGridReady действительно вызывался до запуска моих тестов?

spe c file:

describe('MyComponent', () => {
  let spectator: SpectatorHost<MyComponent>;
  let fixture: ComponentFixture<MyComponent>;

  const createHost = createHostFactory({
    component: MyComponent,
    entryComponents: [MyComponent],
    imports: [
      TranslateModule.forRoot(),
      AgGridModule.withComponents([]),
      MatTooltipModule,
      InlineSVGModule.forRoot(),
      MaterialModule,
      HMSharedModule,
    ],
    providers: [
      {
        provide: MatDialogRef,
        useValue: [],
      },
      {
        provide: MAT_DIALOG_DATA,
        useValue: [],
      },
      HttpClient,
      HttpHandler,
    ],
  });

  beforeEach(() => {
    spectator = createHost(`<MyComponentSelector></MyComponentSelector>`, {
      hostProps: {},
    });
    fixture = spectator.fixture;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(spectator.component).toBeTruthy();
  });

  it('should detect changes', () => {
    spectator.fixture.detectChanges();

  });

"должен создавать" работает, но "должен обнаруживать изменения" не удается с этой ошибкой :

TypeError: Cannot read property 'setColumnDefs' of undefined

в html, вот моя ag-сетка:

          <ag-grid-angular
            style="height: 157px"
            #agGrid1
            class="ag-grid ag-theme-balham"
            [rowSelection]="rowSelection"
            [columnDefs]="columnDefs1"
            [gridOptions]="gridOptions"
            (gridReady)="onGridReady($event)"
            (gridSizeChanged)="resizeColumns($event)"
            (cellValueChanged)="updateBottomGrid('agGrid1', false)"
            [singleClickEdit]="true"
          >
          </ag-grid-angular>

и вот onGridReady:

  onGridReady(params: any): void {
    console.log('onGridReady called successfully');
    if (this.agGrid1) {
      this.agGrid1.api = params.api;
    }
  }

Консольный оператор никогда не печатается, поэтому onGridReady почему-то никогда не вызывается. Как я могу заставить его вызываться перед модульным тестом?

Редактировать: Кто-то упомянул, что мне нужно предоставить данные для columnDefs, но у меня уже есть initializeColumnDefs(), который определяет все столбцы, и я подтвердил, что это действительно вызывается во время модульного теста, так что это не проблема.

Кроме того, я не думаю, что это актуально, но этот компонент является MatDialog.

1 Ответ

2 голосов
/ 25 марта 2020

Мне удалось избавиться от этой ошибки, добавив:

import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';

modules: Module[] = [ClientSideRowModelModule];

и добавив модуль в сетку

          <ag-grid-angular
            style="height: 157px"
            #agGrid1
            class="ag-grid ag-theme-balham"
            [rowSelection]="rowSelection"
            [columnDefs]="columnDefs1"
            [gridOptions]="gridOptions"
            (gridReady)="onGridReady($event)"
            (gridSizeChanged)="resizeColumns($event)"
            (cellValueChanged)="updateBottomGrid('agGrid1', false)"
            [singleClickEdit]="true"
            [modules]="modules"
          >
          </ag-grid-angular>

Я понятия не имею, почему это исправило это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...