You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular+PrimeNG表格Jasmine单元测试:无法获取渲染HTML

解决PrimeNG表格在Angular单元测试中未渲染的问题

我之前也碰到过一模一样的情况!问题的核心很简单:你的测试模块没有导入PrimeNG的TableModule,Angular在测试环境下无法识别<p-table>组件,所以只会渲染一个空的占位标签,不会处理内部的表头、模板和数据。

修复步骤:

  1. 在测试文件中导入TableModule
    在测试文件的顶部添加PrimeNG表格模块的导入:

    import { TableModule } from 'primeng/table';
    
  2. 在TestBed中添加模块依赖
    修改TestBed.configureTestingModule,把TableModule加入到imports数组里:

    beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [ TestComponent ],
        imports: [TableModule] // 新增这一行,导入PrimeNG表格模块
      }).compileComponents();
    }));
    

验证修复效果

修改后重新运行测试,你会发现<p-table>已经正确渲染出完整的HTML结构了。此时你可以取消注释测试代码里的断言:

const tableEl = fixture.debugElement.query(By.css('div'));
const bodyRows = tableEl.query(By.css('.ui-table-tbody')).queryAll(By.css('tr'));
expect(bodyRows.length).toEqual(10);

这个断言应该能顺利通过,因为表格已经渲染出10行数据了。

额外注意点

  • 如果你的组件里还用到了其他PrimeNG组件(比如分页、排序相关的),记得也要导入对应的模块(比如PaginatorModule等)。
  • 如果你后续要测试异步加载的数据,可能需要结合fakeAsynctick来等待数据加载完成后再触发变更检测,但你的示例里是静态数据,所以当前的fixture.detectChanges()就足够了。

内容的提问来源于stack exchange,提问作者Moderaterer

火山引擎 最新活动