У меня есть служба Angular, предоставляющая публичный метод. Внутри его тела в зависимости от условия могут быть вызваны два разных приватных метода.
Как я могу проверить с помощью jasmine, был ли вызван тот или иной метод, в соответствии с входным параметром, переданным в открытый метод? Я знаю, что мы не должны тестировать частные методы, но на самом деле здесь я просто хочу проверить, вызывает ли общедоступный правильный метод. Я не хочу делать частные методы общедоступными, поскольку мне нужна только одна точка доступа, предоставляемая службой.
Мои методы обслуживания:
public addOrUpdateShoppingList(list: ShoppingList) {
if (!list) {
return Promise.reject("List object is null!");
}
if (!list.id) {
return this.createNewList(list);
}
return this.updatelist(list);
}
private createNewList(list: ShoppingList) {
const id = this.db.createId();
list.id = id;
return this.db.collection<ShoppingList>(this.SHOPPING_LIST_COLLECTION)
.doc(id)
.set(list);
}
private updatelist(list: ShoppingList) {
return this.db.collection<ShoppingList>(this.SHOPPING_LIST_COLLECTION)
.doc(list.id)
.update(list);
}
Жасминовый тест:
it("addOrUpdateShoppingList should invoke createNewList() if the list doesn't have id.", () => {
const service: DataService = TestBed.get(DataService);
const mockedList: ShoppingList[] = [
{
id: null,
isActive: true,
}
];
service.addOrUpdateShoppingList(newList);
// I tried even with this "workaround", but it fails, even if the private method is accessed
const sp = spyOn<any>(service, "createNewList").and.callThrough();
expect(sp).toHaveBeenCalled();
});