【发布时间】:2018-03-06 11:43:36
【问题描述】:
我创建了 Angular 5 项目并使用 Karma、Jasmine 编写单元测试。我不喜欢公开所有方法仅用于从测试中访问的想法。
export class AppComponent {
mainMenu: any[];
constructor(
private menuService: MenuService
) {}
ngOnInit(): void {
this.initTable();
this.initMenu();
}
private initTable(): void {
// ... initializes array for table
}
private initMenu(): void {
this.menuService.getMainMenu()
.subscribe(data => this.mainMenu = data);
}
}
initTable 和 initMenu 方法只是用于划分代码并使其更有条理和可读性的助手,我不需要在 public 模式下访问它们。但是在这里我遇到了单元测试的问题,我的测试用例应该是这样的:
it ('Should call menuService.getMainMenu', () => {
spyOn(menuService, 'getMainMenu').and.returnValue(Observable.of([]));
// this will throw exception
component.initMenu();
expect(menuService.getMainMenu).toHaveBeenCalled();
});
有什么想法吗?
【问题讨论】:
-
嗯,它们是私有的,这意味着您将无法测试它们。您可以将它们(暂时)公开,测试它们,让您的产品所有者看到它并添加到代码覆盖率文件中,然后将它们转换回私有。
标签: angular unit-testing typescript karma-jasmine