Жасмин Шпион на функции Typescript класса Get () или Set () - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Jasmine 2.9, и у меня нет проблем с шпионажем функции, будь то публичной или частной, но у меня возникают трудности с попыткой шпионить за get или set функцией на уровне класса.

private class RandomService {
  public dogsHealth = 0;

  private get personsFullName(): string {
    return firstName + lastname;
  }

  private set personsLocation(address: string, city: string, country: string): string {
    return address + city + country;
  }

  public get dogsFullName(): string {
    return dogFirstName + dogLastName;
  }

  public get isDogAlive(): boolean {
    return dogsHealth <= 0 ? true : false;
  }
}

Решения, которые я пробовал:

spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue(true);
spyOnProperty(RandomService, 'dogsFullName').and.returnValue(true);
spyOn(RandomService, 'dogsFullName').and.returnValue(true);
spyOnProperty(RandomService.dogsFullName, 'dogsFullName', 'get').and.returnValue(true);

В настоящее время я не нашел решения этой проблемы в Интернете, но продолжу поиск.Я знаю, что функции get или set создают переменную, поэтому я подумал, что, возможно, решение 4 сработало бы, но все еще нет.

Обновление

(Код выше также обновлен).

Попытка обновления вернуть строку и использование следующего жасмина дают мне ошибку:

spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue('Frank');

Expected a spy, but got 'Frank'

А также для функции isDogAlive я получаю следующее:

<toHaveBeenCalled> : Expected a spy, but got true.

Я понимаю, что это дает мне правильное значение, но если я spyOn, то не должен ли он быть шпионом?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вот несколько вариантов для вас:

spyOnProperty(RandomService.prototype, 'dogsFullName', 'get').and.returnValue('ben');

// or
service = new RandomService();
spyOnProperty(service, 'dogsFullName', 'get').and.returnValue('ben');

Или, если ваш метод статичен для класса:

export class RandomService {
  static dogFirstName: string;
  static dogLastName: string;

  public static get dogsFullName() {
    return RandomService.dogFirstName + RandomService.dogLastName;
  }
}

spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue('ben');
0 голосов
/ 11 сентября 2018

Вместо того, чтобы возвращать логическое значение true, попробуйте вернуть что-то вроде «откровенный».Возвращаемое значение, скорее всего, ожидает строковое значение, а не логическое значение, которое может быть причиной проблемы.

let spyTemp = spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue("frank");

, затем

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