sourcetip

Jasmine을 사용한 각도 단위 테스트: spyOn 제거 또는 수정 방법

fileupload 2023. 2. 27. 22:25
반응형

Jasmine을 사용한 각도 단위 테스트: spyOn 제거 또는 수정 방법

AngularJS v1.2.26

Jasmine 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);

          ...

        });
    });

...

두 번째 스파이를 제거하면 테스트가 작동하지 않습니다.

이거 어떻게 해?

덮어쓰기만 하면 됩니다.

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);        

Jasmine v2.5 이후 글로벌 사용allowRespy()설정.

jasmine.getEnv().allowRespy(true);

전화하실 수 있을 겁니다spyOn()원하지 않거나 첫 번째 스파이에 접근할 수 있을 때 여러 번.이미 활동 중인 스파이가 있다면 이전 스파이를 돌려보낼 것입니다.

spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);
...
spyOn(updateService, 'getUpdate').and.returnValue(deferred.promise);

More easier and simpler way:

updateService.getUpdate.and.returnValue(Observable.of({status:true}));

It will return the value.

Another option:

(yourService.method as jasmine.Spy).and.returnValue(value);

the green check-marked answer didn't work for me, but this did:

yourCoolService.createThing = jasmine.createSpy('notreal', function(){}).and.returnValue();

당신의 재스민 테스트는 실행되지만, 당신이 기동하러 갈 때, 당신이 args에 임의의 문자열과 빈 함수를 넣지 않으면 당신의 앱 타이프 스크립트는 당신에게 큰 소리를 지를 것입니다.createSpy().

ReferenceURL : https://stackoverflow.com/questions/28821511/angular-unit-testing-with-jasmine-how-to-remove-or-modify-spyon

반응형