Проверьте, был ли сервис обновлен внутри метода с использованием Karma - PullRequest
1 голос
/ 08 апреля 2019

Я хочу проверить, имел ли сервис, который есть в компоненте, свой атрибут после обновления метода.Как я могу это сделать?

//.ts
public makeSomething(obj:MyObj) {
     //set attribute on my service 
     this.myService.setAtt(true);
}


.spec.ts
  it('should set attrib true on my service ',async(() => {

      let myObj: MyObj;
      component.makeSomething(myObj);
      //should check here if my service has att true!!!!!
      //how??     
 }));

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Вы не должны проверять, был ли обновлен ваш сервис.Что вы должны проверить, так это то, что ваш сервисный метод был вызван.

Вы будете проверять, что ваш сервис был обновлен в тестах вашего сервиса.

Это то, что должно делать юнит-тестирование: тестировать юнит.

Если вы проверяете, что ваша служба обновлена, вам придется обновлять свои тесты при каждой смене службы.Теперь представьте, что этим сервисом пользуются 400 компонентов, что вы будете делать?Редактировать все компоненты?

Просто проверьте, что функция была вызвана:

const spy = spyOn(component.myService, 'setAttr');
component.makeSomething(myObj);
expect(spy).toHaveBeenCalledWith(true);
expect(spy).toHaveBeenCalledTimes(1);
1 голос
/ 08 апреля 2019

Я рекомендую вам использовать spyOn(...) с методом toHaveBeenCalled(), чтобы проверить обновленное значение после вызова.

Вот пример о том, как его использовать.

Итак, в вашем spec файле это будет выглядеть так:

  it('should set attrib true on my service ',async(() => {

      let myObj: MyObj;
      spyOn(myService, 'myServiceMethod');
      component.makeSomething(myObj);

      expect(myService.myServiceMethod).toHaveBeenCalled();
      // other checks here...
   }));

Не забудьте импортировать ваш сервис в выписке it.

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