Как заставить Jasmine spyOnProperty работать?

Я видел этот пост и был очень рад попробовать, но я не могу заставить его работать. Попытка сохранить это просто, чтобы понять, что неправильно, но даже это не работает.

export class SomeService {
...
private _myValue: Boolean = false;
get myValue(): Boolean {
    return this._myValue;
}
set myValue(helper: Boolean) {
    this._myValue = helper;
}

И в моем unit test у меня есть:

 it('should ', inject([SomeService], (someService: SomeService) => {         
    let oldValue = someService.myValue;    
    expect(oldValue).toBe(false); // passes, clearly we can use our getter
    someService.myValue = true;    
    expect(someService.myValue).toBe(true); // passed, clearly the setter worked

    spyOnProperty(someService, 'myValue', 'getter').and.returnValue(false); // Property myValue does not have access type getter

    //spyOnProperty(someService, 'myValue', 'get').and.returnValue(false);same error if tried this way

    expect(someService.myValue).toBe(false);
 }));

Я положил значения вверх, чтобы четко показать, что могу получить и установить значение. У этого нет проблем. Wallaby показывает ReferenceError: spyOnProperty не определен в строке spyOnProperty. Я не уверен, что это помогает, но ошибки, которые я поставил выше, были тем, что дает мне карма, когда я запускаю эти тесты.

Любой, кто получил это, я бы очень признателен за помощь. Извиняясь за любые опечатки, я смотрел на это большую часть дня.

Ответ 1

Ну, я потратил на это больше времени, чем хотел бы признать, но в итоге получилась простая синтаксическая ошибка:

Правильное значение для использования в качестве 3-го параметра - это get, а не getter как раньше. Например:

spyOnProperty(someService, 'myValue', 'get').and.returnValue(false)

Что я пробовал на ранней стадии, но в то время не получалось. Я не уверен, что изменилось. Я также обновил @types/jasmine вместе со всем остальным в своей библиотеке dev до @latest, но потом не перезапустил IDE, потому что не думал, что это будет иметь значение. Я могу только догадываться, почему это работает сейчас.

Ответ 2

Я все еще немного борется, чтобы заставить set работать.

const foo = {
  get value() {},
  set value(v) {}
};

it('can spy on getters', () => {
  spyOnProperty(foo, 'value', 'get').and.returnValue(1);
  expect(foo.value).toBe(1);
});

it('and on setters', () => {
  const spiez = spyOnProperty(foo, 'value', 'set');
  foo.value = true;
  expect(spiez).toHaveBeenCalled();
});