Unit testing 在Angular 2中对ag网格进行单元测试

Unit testing 在Angular 2中对ag网格进行单元测试,unit-testing,angular,ag-grid,Unit Testing,Angular,Ag Grid,是否有人在Angular 2中对ag网格组件进行单元测试 对我来说,当测试用例运行时,this.gridOptions.api保持未定义状态。它保持未定义状态,因为事件onGridReady尚未调用。我不确定Angular 2,因为我使用angularjs,为了调用onGridReady,我必须做$digest。很抱歉来晚了一点,但几天前我还在寻找答案,所以我想给其他人留下一个答案。正如上面Minh所提到的,要使ag网格api可用,确实需要运行现代版的$digest 这是因为在运行了onGrid

是否有人在Angular 2中对ag网格组件进行单元测试


对我来说,当测试用例运行时,this.gridOptions.api保持未定义状态。

它保持未定义状态,因为事件onGridReady尚未调用。我不确定Angular 2,因为我使用angularjs,为了调用onGridReady,我必须做$digest。

很抱歉来晚了一点,但几天前我还在寻找答案,所以我想给其他人留下一个答案。正如上面Minh所提到的,要使ag网格api可用,确实需要运行现代版的
$digest

这是因为在运行了
onGridReady()
之后,您可以通过参数访问api,看起来是这样的。初始化带有栅格的零部件时,将自动运行此操作。如果在网格
(gridReady)=“onGridReady($event)”

这现在意味着您可以访问
This.gridOptions.api
,它将被定义,您需要通过运行
detectChanges()
在测试中重新创建它。以下是我如何让它为我的项目工作

fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;

fixture.detectChanges(); // This will ensure the onGridReady(); is called
这将导致在运行测试时定义
.api
。这是有角度的

有时,测试可能需要执行等待或勾选:

  it('should test the grid', fakeAsync( async () => {
    // also try tick(ms) if a lot of data is being tested
    // try to keep test rows as short as possible
    // this line seems essential at times for onGridReady to be processed.
    await fixture.whenStable();
    // perform your expects...after the await
  }));

如果您使用的是ag grid enterprise,请确保在测试文件中包含导入“ag grid enterprise”否则您将看到控制台错误,并且永远不会调用gridReady:

Row Model "Server Side" not found. Please ensure the ag-Grid Enterprise Module @ag-grid-enterprise/server-side-row-model is registered.';

有时,您还需要使用一个fakeAsync调用,例如可能带有一个勾号(10),甚至还有一个wait fixture.whenStable()子句,以确保网格完全初始化。由于某些原因,网格需要几毫秒才能确定大小,然后它将调用onGridReady。我还没有尝试过,如果您认为有用,请随意将其编辑到答案中:-)我现在提供了一个更新。如果您有进一步的评论,请重新编辑。可爱的东西:-)我在angular中测试ag网格时遇到了完全相同的问题。网格可以很好地工作,但是在UT期间,它会抛出此错误。在spec文件中添加导入ag-grid-enterprise解决了这个问题。
Row Model "Server Side" not found. Please ensure the ag-Grid Enterprise Module @ag-grid-enterprise/server-side-row-model is registered.';