Я пытаюсь протестировать довольно сложный сервис в моем приложении Angular. Чтобы сделать это, мне нужно иметь возможность смоделировать количество различных зависимостей, которые есть у службы, для этого я использую шпионы.
Служба выполняет несколько разных действий с двумя из зависимостей внутри конструктор, и прежде чем я начну тестировать сервис, мне нужно убедиться, что он работает правильно, поэтому мне нужно удовлетворить требования конструктора.
Конструктор имеет две отдельные подписки, одну на метод, который возвращает Observable<string>
, а другую на BehaviourSubject<boolean>
.
constructor(
private _translate: TranslateService,
private _policiesService: PoliciesService,
) {
_translate.get('services.filter').subscribe((filterObject: any) => {
// do stuff...
});
this._policiesService.isPolicyLocked.subscribe(activePolicyLockState => {
// do stuff...
});
}
Я легко могу смоделировать первую подписку, используя шпион, а затем присвоение метода и возвращаемого значения в моем beforeEach (), как показано ниже.
beforeEach(() => {
spy_TranslateService = jasmine.createSpyObj('TranslateService', ['get', 'setDefaultLang']);
spy_TranslateService.get.and.returnValue(of(translationFilterObject));
//etc..
});
Но я не могу сделать это с моим субъектом поведения, так как это не метод, а свойство PoliciesService. Есть ли способ, которым я могу смоделировать свойство и дать ему заданное c возвращаемое значение, аналогично тому, как я могу с методами? Желательно без использования геттеров и сеттеров.