Как создать свойство на Angular шпион Жасмин? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь протестировать довольно сложный сервис в моем приложении 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 возвращаемое значение, аналогично тому, как я могу с методами? Желательно без использования геттеров и сеттеров.

1 Ответ

0 голосов
/ 16 апреля 2020

Попробуйте:

spy_PoliciesService = jasmine.createSpyObj('PoliciesService', []);
spy_PoliciesService.isPolicyLocked = new BehaviorSubject(...); // mock what it should return in the ...
...