2014-06-30 5 views
1

비동기 적으로 실행되는 각도 컨트롤러를 단위 테스트하려면 Jasmine을 사용하고 있습니다. 컨트롤러에 종속성을 성공적으로 주입 할 수 있었지만 데이터가로드되기 전에 내 테스트가 실행되므로 비동기 처리 방법을 변경해야했습니다. 현재 모의 의존성에 대한 간첩을 사용하고 andCallThrough()을 사용하려고하지만 오류 TypeError: undefined is not a function이 발생합니다.재스민 단위 테스트 비동기 컨트롤러 방법

여기 내 컨트롤러의 ...

myApp.controller('myController', function($scope, users) { 
    $scope.user = {}; 

    users.current.get().then(function(user) { 
     $scope.user = user; 
    }); 
}); 

내 test.js ...

describe('myController', function() { 
    var scope, createController, mockUsers, deferred; 
    beforeEach(module("myApp")); 

    beforeEach(inject(function ($rootScope, $controller, $q) { 
     mockUsers = { 
      current: { 
       get: function() { 
        deferred = $q.defer(); 
        return deferred.promise; 
       } 
      } 
     }; 
     spyOn(mockUsers.current, 'get').andCallThrough(); 

     scope = $rootScope.$new(); 
     createController = function() { 
      return $controller('myController', { 
       $scope: scope, 
       users: mockUsers 
      }); 
     }; 
    })); 


    it('should work', function() { 
     var ctrl = createController();   
     deferred.resolve('me'); 
     scope.$digest(); 
     expect(mockUsers.current.get).toHaveBeenCalled(); 
     expect(scope.user).toBe('me');   
    }); 
}); 

알려 주시기 바랍니다 테스트 이러한 유형의 더 나은 방법이 있다면, 감사합니다 .() 최신 버전에 andCallThroungh을 객체 및 내부 :

답변

4

spyOn(mockUsers.current, 'get').and.callThrough(); 

당신이 사용한 버전에 따라 다릅니다보십시오. 여기에 설명서가 있습니다 http://jasmine.github.io/2.0/introduction.html

+0

감사합니다. 2.0을 사용 중이며 이전 버전의 예를보고있었습니다. –