首页 > 解决方案 > Karma Jasmine - 代码覆盖率不涵盖 Observable 订阅方法中的函数

问题描述

我正在对我的 Angular 10 项目中的一种组件方法进行单元测试

我看到了这段代码:

消息列表组件.ts

编辑:更新完整代码(答案已经在这篇文章的评论中)

@Component({
    selector: 'app-message-list',
    template: ...,
    providers: [
        MessageService
    ]
})
export class MessageListComponent {

    constructor(private messageService: MessageService) {}

    ngOnInit() {
        // other implementation
        ....
    
        this.GetAllContents();
    }
    GetAllContents() {
        if(this.subscribedMessage) {
            this.subscribedMessage.unsubscribe();
        }
        this.subscribedMessage = this.messageService.getAllContents().subscribe((data) => {
            data && data.forEach(item => this.dataList.push(item));
            // further codes here
            ...
        }, 
        () => {
            // further codes here
            ...
        });

        // further codes here
        ...
    }

}

我创建了一个这样的规范文件:

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();
    });
});
    

当我运行 ng 测试时 --code-coverage=true

覆盖得到了方法内部的实现GetAllContentsMessageListComponent但订阅方法内部的函数没有被覆盖覆盖

在 subscribe 方法中获取函数是否缺少一些东西?

标签: unit-testingkarma-jasminecode-coverageangular10

解决方案


推荐阅读