单元测试 - onGridReady - Angular 中的 Ag-grid 事件

Posted

技术标签:

【中文标题】单元测试 - onGridReady - Angular 中的 Ag-grid 事件【英文标题】:Unit testing - onGridReady - Ag-grid event in Angular 【发布时间】:2021-01-15 04:31:54 【问题描述】:

我的组件文件中有一个类似下面的函数,如下所示

onGridReady(params) 
  this.gridApi = params.api;
  this.columnApi = params.columnApi;
  this.gridApi.setDomLayout('autoHeight');
  this.gridApi.sizeColumnsToFit();
  params.api.setRowData(this.deviceConfigurations);

对于上述功能,我正在编写如下规范

describe('#onGridReady()', () => 
    const params = 
      api: new MockGridApi(),
      ColumnApi: new MockColumnApi(),
    ;

    it('call the function', () => 
      spyOn(component, 'onGridReady').and.callThrough();
      component.onGridReady(params);

      expect(component.onGridReady).toHaveBeenCalled();
    );
  );

规范通过以及上述功能的覆盖范围已完成。但我想知道这是正确的方法还是编写规范,或者我是否需要编写更多规范,例如 sizeColumnsToFit() 已被调用等, 任何人都可以发表你的看法。

【问题讨论】:

有一种更好的方法来测试该 ag-grid 事件,它应该在您提供组件时由 grid API 自动调用... @HDJEMAI 请问我是怎么做到的 初始化你的组件,你必须验证onGridReady()所做的事情是否已经设置。验证所有内容并不容易,但您应该验证与您的应用业务相关的内容,而不是 Ag-grid 特定的行为。 【参考方案1】:

onGridReady() 应该在 ngOnInit() 之后自动调用,所以我的偏好是测试 onGridReady() 正在做什么。

这就是我的做法:

    import waitForAsync from '@angular/core/testing';

    // 1) Add waitForAsync() to my test
    it('should do things onGridReady() is supposed to do', waitForAsync(() => 

        const expectedRowData = [id: 1, dataPoint: 'someDataPoint'];

        // call ngOnInit directly
        component.ngOnInit();
        fixture.detectChanges();

        // wait for the fixture to stabilize
        fixture.whenStable().then(() => 
            console.log(' ==> stable!');
            expect(component.gridOptions.rowData).toEqual(expectedRowData);
            // whatever other tests...
        );

    ));

我的 ts 文件看起来像这样:

    onGridReady(params: any): void 
        console.log('the grid is ready!');
        this.gridApi = params.api;
        this.columnApi = params.columnApi;
        this.gridApi.setDomLayout('autoHeight');
        this.gridApi.sizeColumnsToFit();
        this.gridOptions.rowData = this.deviceConfigurations;
    

PS~如果你在 onGridReady() 方法中调用 setRowData,我想你可能会陷入死循环。

【讨论】:

以上是关于单元测试 - onGridReady - Angular 中的 Ag-grid 事件的主要内容,如果未能解决你的问题,请参考以下文章

React ag-grid OnGridReady setRowData 为空 - 如何在调用 OnGridReady 之前加载数据?

10个可靠的JavaScript测试工具

ngFor 中的 Angular 动态事件名称

单击日期选择器时,单元格编辑器上的 Ag-grid Angular Material Datepicker 失去焦点

Cordova s​​qliteplugin 业力测试说明

我应该如何使用 React Hooks 挂在 ag-grid api 上