Я хочу проверить, обновил ли сервис, который у меня есть в компоненте, свой атрибут после вызова метода. Как я могу это сделать?
//.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??
}));
Я рекомендую вам использовать 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
.
Это импорт, который не работает, или код внутри самого оператора it
?
сам импорт
Если этот способ не работает для вас, вы можете попробовать сделать инъекцию непосредственно перед let myObj: MyObj;
вот так: const myService = fixture.debugElement.injector.get(MyService);
Вы не должны проверять, был ли обновлен ваш сервис. Что вы должны проверить, так это то, что ваш метод службы был вызван.
Вы проверите, что ваш сервис был обновлен в тестах вашего сервиса.
Это то, что должно делать модульное тестирование: тестировать модуль.
Если вы проверите, что ваша служба была обновлена, вам придется обновлять свои тесты каждый раз, когда вы меняете свою службу. Теперь представьте, что этот сервис используется 400 компонентами, что вы будете делать? Редактировать все компоненты?
Просто проверьте, что функция была вызвана:
const spy = spyOn(component.myService, 'setAttr');
component.makeSomething(myObj);
expect(spy).toHaveBeenCalledWith(true);
expect(spy).toHaveBeenCalledTimes(1);
Как вы используете component.myService? Его нельзя вызвать напрямую
Используйте component['myService']
, обозначение массива, или сделайте свой сервис общедоступным
it('должен установить attrib true для моей службы',inject([MyService], (myService: Myservice) =>{ не работает. Вы знаете, как я могу это сделать?