Как заставить 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();
});