如何编写Karma Jasmine测试用例覆盖AG Grid列定义相关方法
AG Grid列定义的Karma Jasmine测试覆盖解决方案
一、先梳理测试依赖的Mock配置
你的列定义依赖了TranslateService、UtilService和TmLinkConstants,测试前必须正确Mock这些依赖,否则会因依赖未初始化导致测试失效:
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { TranslateService } from '@ngx-translate/core'; import { UtilService } from 'path-to-your-util-service'; import { TmLinkConstants } from 'path-to-your-constants'; import { YourComponent } from './your.component'; // Mock TranslateService class MockTranslateService { instant(key: string) { return key; // 可根据需求返回模拟翻译值,这里直接返回key做验证 } } // Mock UtilService class MockUtilService { dateFormatter(date: any, format: string) { return `formatted_${date}`; // 模拟日期格式化结果 } }
二、编写完整测试用例
在测试套件中注入Mock服务并实例化组件,针对列定义的每个属性和回调函数逐一验证:
describe('YourComponent', () => { let component: YourComponent; let fixture: ComponentFixture<YourComponent>; let utilService: MockUtilService; let translateService: MockTranslateService; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [YourComponent], providers: [ { provide: TranslateService, useClass: MockTranslateService }, { provide: UtilService, useClass: MockUtilService } ] }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(YourComponent); component = fixture.componentInstance; utilService = TestBed.inject(UtilService) as MockUtilService; translateService = TestBed.inject(TranslateService) as MockTranslateService; fixture.detectChanges(); }); // 验证列基础属性配置 it('should initialize lastUpdateDate column with correct base properties', () => { // 假设列定义是组件的columnDefs属性,根据实际情况调整 const dateColumn = component.columnDefs.find(col => col.field === 'lastUpdateDate'); expect(dateColumn).toBeTruthy(); expect(dateColumn.headerName).toBe(translateService.instant('_updated_date_')); expect(dateColumn.headerTooltip).toBe(translateService.instant('_updated_date_')); expect(dateColumn.minWidth).toBe(120); }); // 验证valueFormatter有值时的行为 it('valueFormatter should return formatted date when value exists', () => { const dateColumn = component.columnDefs.find(col => col.field === 'lastUpdateDate'); const mockDate = '2024-05-20'; const expectedFormat = utilService.dateFormatter(mockDate, TmLinkConstants.DATE_FORMAT); const result = dateColumn.valueFormatter({ value: mockDate }); expect(result).toBe(expectedFormat); }); // 验证valueFormatter无值时的行为 it('valueFormatter should return empty string when value is null/undefined', () => { const dateColumn = component.columnDefs.find(col => col.field === 'lastUpdateDate'); expect(dateColumn.valueFormatter({ value: null })).toBe(''); expect(dateColumn.valueFormatter({ value: undefined })).toBe(''); }); // 验证tooltipValueGetter的两种场景 it('tooltipValueGetter should return formatted date when value exists, empty string otherwise', () => { const dateColumn = component.columnDefs.find(col => col.field === 'lastUpdateDate'); const mockDate = '2024-05-20'; const expectedFormat = utilService.dateFormatter(mockDate, TmLinkConstants.DATE_FORMAT); expect(dateColumn.tooltipValueGetter({ value: mockDate })).toBe(expectedFormat); expect(dateColumn.tooltipValueGetter({ value: null })).toBe(''); }); });
三、测试未生效的常见排查点
- 列定义访问路径错误:确保从组件实际属性(如
component.columnDefs)获取列定义,而非测试代码中硬编码。 - Mock服务注入失败:检查TestBed的providers配置,确认Mock类正确替换了真实服务。
- 回调函数未主动触发:单元测试中AG Grid不会自动调用
valueFormatter和tooltipValueGetter,需手动传入模拟params参数调用。 - 代码覆盖配置问题:检查Karma的
karma.conf.js,确保coverageReporter包含你的组件文件,配置正确的include/exclude规则。
内容的提问来源于stack exchange,提问作者Walle
相关产品推荐
相关产品推荐

