我创建了angular 5
项目并使用unit tests
撰写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
模式下访问它们。但在这里我遇到unit testing
的问题,这是我的测试用例的样子:
it ('Should call menuService.getMainMenu', () => {
spyOn(menuService, 'getMainMenu').and.returnValue(Observable.of([]));
// this will throw exception
component.initMenu();
expect(menuService.getMainMenu).toHaveBeenCalled();
});
有什么想法吗?
答案 0 :(得分:0)
您可以通过公共ngOnInit
方法实现此目的。您可以调用initMenu
来间接调用私有ngOnInit
initMenu
it ('Should call menuService.getMainMenu', () => {
spyOn(menuService, 'getMainMenu').and.returnValue(Observable.of([]));
// this will throw exception
component.ngOnInit();
expect(menuService.getMainMenu).toHaveBeenCalled();
});
出于某种原因,私人方法是私有的。如果你有一个复杂的私有方法,你需要对它进行测试,那就是代码味道,表明你的代码有问题,或者方法不应该是私有的