Unit testing Karma Jasmine-代码覆盖范围不覆盖Observable';s订阅方法
我正在对angular 10项目中的组件方法之一进行单元测试 我看到了这个代码: MessageListComponent.tsUnit testing Karma Jasmine-代码覆盖范围不覆盖Observable';s订阅方法,unit-testing,karma-jasmine,code-coverage,angular10,Unit Testing,Karma Jasmine,Code Coverage,Angular10,我正在对angular 10项目中的组件方法之一进行单元测试 我看到了这个代码: MessageListComponent.ts describe('MessageListComponent', () => { let fixture: ComponentFixture<MessageListComponent>; let component: MessageListComponent; let messageService: MessageServic
describe('MessageListComponent', () => {
let fixture: ComponentFixture<MessageListComponent>;
let component: MessageListComponent;
let messageService: MessageService;
beforeEach(() => {
// TestBed configuration
TestBed.configureTestingModule({
....
providers: [
MessageService,
....
]
}).compileComponents();
});
beforeEach(() => {
messageService = TestBed.inject(MessageService);
messageService.getAllContents = jasmine.createSpy().and.returnValue(observableOf(<any[]>[{}]));
fixture = TestBed.createComponent(MessageListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should load', () => {
expect(messageService.getAllContents).toHaveBeenCalled();
});
});
编辑:更新完整的代码(答案已经在这篇文章的评论中)
我创建了一个等级库文件,如下所示:
MessageListComponent.spec.ts
describe('MessageListComponent', () => {
let fixture: ComponentFixture<MessageListComponent>;
let component: MessageListComponent;
let messageService: MessageService;
beforeEach(() => {
// TestBed configuration
TestBed.configureTestingModule({
....
providers: [
MessageService,
....
]
}).compileComponents();
});
beforeEach(() => {
messageService = TestBed.inject(MessageService);
messageService.getAllContents = jasmine.createSpy().and.returnValue(observableOf(<any[]>[{}]));
fixture = TestBed.createComponent(MessageListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should load', () => {
expect(messageService.getAllContents).toHaveBeenCalled();
});
});
description('MessageListComponent',()=>{
let夹具:组件夹具;
let组件:MessageListComponent;
let messageService:messageService;
在每个之前(()=>{
//试验台配置
TestBed.configureTestingModule({
....
供应商:[
消息服务,
....
]
}).compileComponents();
});
在每个之前(()=>{
messageService=TestBed.inject(messageService);
messageService.getAllContents=jasmine.createSpy()和.returnValue(observeof([{}]);
fixture=TestBed.createComponent(MessageListComponent);
组件=fixture.componentInstance;
fixture.detectChanges();
});
它('应该加载',()=>{
expect(messageService.getAllContents).toHaveBeenCalled();
});
});
当我运行ng测试时——代码覆盖率=true
覆盖范围在MessageListComponent
的GetAllContents
方法中得到了实现,但是订阅方法中的函数没有被覆盖范围覆盖
在subscribe方法中获取函数是否缺少一些内容?您需要测试subscribe块的
//这里有更多的代码
,很抱歉回复太晚。在同事的帮助下,我解决了这个问题。他发现服务也被注入@Component注释的提供者
属性中。删除这些代码使我的代码覆盖率发挥了作用:)顺便说一句,感谢您提供帮助,您需要测试订阅块的//此处的进一步代码
。很抱歉回复太晚。在同事的帮助下,我解决了这个问题。他发现服务也被注入@Component注释的提供者
属性中。删除这些使我的代码覆盖率工作:)顺便说一句,谢谢你的帮助