我的问题是我需要测试Ag Grid表列中显示的实际值。这些值附带了一个cellRenderer,以根据特定条件对其进行格式化。
在我的Jest测试中,我尝试了很多不同的方法:
使用
fixture.debugElement.queryAll(By.css([
selector
]))
,其中[selector]已经是[col-id="amount"]
,.currencyFormat
,lib-frm-result-indicator-cell-renderer
...没有任何工作(0个元素)。要查询没有cellRenderer的值,返回预期的值。注意,我的cellRenderer值的DOM层次结构如下:尝试访问方法
getCellRendererInstances()
。我在这里看到这个方法返回了使用的cellRenderers,我在测试环境之外尝试了它并获得了成功的结果。在我的Jest测试中,component.gridOptions.api
或component.gridApi
都是undefined
。我必须等到gridReady
事件被触发:我试过下面这样的方法:
// 1.
it('cellRenderer is defined', waitForAsync(() => {
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.gridOptions.api).toBeDefined();
})
}))
在这次尝试中,whenStable()
正在运行真实的的代码执行,这会导致很多错误,因为不是所有的代码都被模拟了(我必须模拟很多东西才能真正运行我的TS文件)。
// 2.
it('cellRenderer is defined', (done) => {
component.gridOptions.onGridReady = () => {
fixture.detectChanges(),
const cellRenderer = component.gridOptions.api.getCellRendererInstances();
done();
}
component.gridOptions.columnDefs = [
{ field: 'name' },
{ field: 'amount', cellRenderer: ResultIndicatorCellRendererComonent }
];
fixture.detectChanges();
)
在第二次尝试时,出现超时错误。
那么,要怎么做呢?我是不是漏掉了什么?这可能吗?
1条答案
按热度按时间bttbmeg01#
我想这是可能的,我记得我有很多问题,像你一样,当我试图用
AG-Grid
单元测试组件。它似乎像AG-Grid
自己绘制,没有多少tick
,whenStable
,flush
等将做的伎俩,因为我们没有控制时,它完成渲染。我会尝试使用
setTimeout
来看看它是否解决了这个问题:如果
setTimeout
工作正常,最好创建一个waitUntilTruthy
实用程序函数,如下所示:https://stackoverflow.com/a/60489120/7365461 .然后您可以: