Ответ 1
Вы можете просто перезаписать его
updateService.getUpdate = jasmine.createSpy().and.returnValue(etc)
AngularJS v1.2.26
Жасмин v2.2.0
Как изменить или удалить поведение spyOn
? Когда я пытаюсь переопределить его, я получаю следующую ошибку: Error: getUpdate has already been spied upon
var data1 = 'foo';
var data2 = 'bar';
describe("a spec with a spy", function(){
beforeEach(module('app'));
var $q;
beforeEach(inject(function(_updateService_, _$q_){
updateService = _updateService_;
//spy the results of the getUpdate()
$q = _$q_;
var deferred = $q.defer();
deferred.resolve( data1 );
spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);
}));
describe('and here the spy should be different', function() {
it('returns a different value', function() {
var deferred = $q.defer();
deferred.resolve( data2 );
spyOn(updateService, 'getUpdate'); //ERROR HERE
updateService.getUpdate.and.returnValue(deferred.promise);
...
});
});
...
Когда я удаляю второй spyOn, тест не работает.
Как мне это сделать?
Вы можете просто перезаписать его
updateService.getUpdate = jasmine.createSpy().and.returnValue(etc)
Вы можете переопределить возвращаемое значение шпиона
var deferred = $q.defer();
deferred.resolve( data1 );
var getUpdateSpy = spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);
var newDeferred = $q.defer();
newDeferred.resolve( data2 );
getUpdateSpy.and.returnValue(newDeferred.promise);
Начиная с жасмина v2.5, используйте глобальную allowRespy()
.
jasmine.getEnv().allowRespy(true);
Более простой способ - простой
updateService.getUpdate.and.returnValue(Observable.of({status:true}));
зеленый контрольный ответ не работал для меня, но это произошло:
yourCoolService.createThing = jasmine.createSpy('notreal', function(){}).and.returnValue();
ваш тест на жасмин будет работать, но когда вы пойдете, чтобы запустить приложение, скрипт будет громко кричать на вас, если вы не ставите случайную строку и пустую функцию в качестве аргументов createSpy()
.
Другой вариант:
(yourService.method as jasmine.Spy).and.returnValue(value);