У меня есть компонент, который использует класс LocaleService
и статический метод этой службы instant()
. LocaleService
не вводится в компонент. При тестировании компонента меня не интересуют LocaleService
внутреннее устройство и я не хочу его тестировать. Таким образом, в beforeEach
я добавил шпиона
const localeServiceInstantSpy = spyOn(LocaleService, 'instant');
localeServiceInstantSpy.and.callFake(msg => msg);
Это хорошо работает. Теперь мне нужно переместить этого шпиона (и других) на заглушку LocaleService
и использовать его в этом тесте и тестах других компонентов с использованием LocaleService
- их много. Как лучше всего этого добиться? Как создать многоразовую LocaleServiceStub?
\app\utils\locale.service.ts
export class LocaleService {
public static lang: string;
private static messages = {
'user.add': {
en: 'Add Local User Account',
de: 'Add Local User Account DE'
},
'user.edit': {
en: 'Edit Local User Account',
de: 'Edit Local User Account DE'
}
};
public static instant(key: string) {
return this.messages[key][this.lang];
}
}
Использование в тестируемом классе \app\settings\users\user-form.component.ts
import { LocaleService } from 'app/utils/locale.service';
...
getDialogHeader() {
return this.isNewUser ? LocaleService.instant('user.add') : LocaleService.instant('user.edit');
}
...