unit-testing - 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
覆盖得到了方法内部的实现GetAllContents
,MessageListComponent
但订阅方法内部的函数没有被覆盖覆盖
在 subscribe 方法中获取函数是否缺少一些东西?
解决方案
推荐阅读
- node.js - 你能在 vanilla js 中构建 vsc 扩展吗?
- android-studio - 清除 Android Studio 文件类型缓存
- r - 从 RShiny 的下拉菜单中选择绘图
- ios - 如何在 Swift 中从服务器转换日期?
- axios - Giving Axios LetsEncrypt's New Root Certificate On Old Version Of Node
- puppet - Puppet:客户端机器上的“puppet agent --test”。我无法在主机和客户端机器上执行 ssh
- laravel - 如何为多级嵌套类别制作 bredcrumb
- html - git点是如何在网站上显示的
- php - 如何拒绝从服务器外部或网站外部访问的 POST 请求
- javascript - 如何使用异步函数等待 onClick() 事件(在模态中的 2 个按钮之间进行选择)