Жасмин проверяет, был ли вызван закрытый метод - PullRequest
0 голосов
/ 11 января 2019

У меня есть служба 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();

});

1 Ответ

0 голосов
/ 12 января 2019

Вы не можете напрямую протестировать приватные методы - ведь это ТОЧКА приватных методов: их нельзя увидеть вне класса, в котором они определены. Чтобы узнать, как это сделать, см. этот вопрос StackOverflow .

Однако в вашем случае вам повезло. Оба ваших приватных метода делают вызов службе базы данных. Просто шпионите за этим вызовом службы и проверьте, что было пройдено - пытаетесь ли вы set или update - это определит, какой внутренний закрытый метод был вызван.

Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...