2015-01-29 3 views
4

나는 이런 재스민 모의를 코딩하여 좋은 추세라고 생각했습니다. 하지만이 오류를 해결할 수 없습니다.정의되지 않은 기능 오류 재스민을 사용할 때

spyOn 메서드는 실제로 어떻게 작동합니까? 사실이 방법은 널리 사용되는 것 같습니다.

내가 대답으로이 작업 코드를 게시하고있다 : 뭔가 2.0

describe('Test Controller', function() { 

var $scope, $rootScope, $q, controller, mockService, queryDeferred; 

//What is the expected response ? 
var expectedResponse = [{ suffix: 'Mr.'}, { prefix: 'Miss'}]; 

beforeEach(function() { 
    angular.module("Test", []); 
}); 

beforeEach(module('Test')); 

beforeEach(inject(function(_$rootScope_, _$q_, $controller) { 
     $q = _$q_; 
     $rootScope = _$rootScope_; 
     $scope = $rootScope.$new(); 


     mockService = { 
     query: function() { 
      queryDeferred = $q.defer(); 
      return queryDeferred.promise; 
     } 
     } 


     spyOn(mockService, 'query').andCallThrough(); 

     // inject the mocked Service into the controller. 
     controller = $controller('TestController', { 
     '$scope': $scope, 
     'ServiceApi': mockService 
     }); 



})); 

}); 


TypeError: undefined is not a function 
     at Object.<anonymous> (d:/karma-requirejs-Angular/test/PromiseSpec.j 
s:34:39) 
     at Object.invoke (d:/karma-requirejs-Angular/lib/angular/angular.js: 
4152:17) 
     at Object.workFn (d:/karma-requirejs-Angular/lib/angular-mocks/angul 
ar-mocks.js:2255:20) 
    Error: Declaration Location 
     at window.inject.angular.mock.inject (d:/karma-requirejs-Angular/lib 
/angular-mocks/angular-mocks.js:2226:25) 
     at Suite.<anonymous> (d:/karma-requirejs-Angular/test/PromiseSpec.js 
:20:16) 
     at d:/karma-requirejs-Angular/test/PromiseSpec.js:7:3 
     at Object.context.execCb (d:/karma-requirejs-Angular/node_modules/re 
quirejs/require.js:1658:33) 
     at Object.Module.check (d:/karma-requirejs-Angular/node_modules/requ 

업데이트에서 변경되었습니다. 몇 가지 문제점을 수정했습니다.

describe('Test Controller', function() { 

    var $q, 
     $rootScope, 
     $scope, 
     mockService, 
     mockResponse = [{ suffix: 'Mr.'}, { prefix: 'Miss'}]; 



    beforeEach(module('myApp')); 

    beforeEach(inject(function(_$q_, 
           _$rootScope_) { 
     $q = _$q_; 
     $rootScope = _$rootScope_; 
    })); 

    beforeEach(inject(function($controller) { 
     $scope = $rootScope.$new(); 

     mockService = { 
      query: function() { 
       queryDeferred = $q.defer(); 
       return {$promise: queryDeferred.promise}; 
      } 
     } 

     spyOn(mockService, 'query').and.callThrough(); 

     $controller('TestCtrl', { 
      '$scope': $scope, 
      'testService': mockService 
     }); 

    })); 

    describe('Given a setup for the invocation of the mock query', function() { 
      beforeEach(function() { 
       queryDeferred.resolve(mockResponse); 
       $rootScope.$apply(); 
      }); 

      it('When the call to the mock service is issued ', function() { 

       resolvespy = jasmine.createSpy('resolve'); 
       rejectspy = jasmine.createSpy('reject'); 

       expect(mockService.query).toHaveBeenCalled(); 

       var q = $scope.getPromise(); 

       q.then(resolvespy,rejectspy); 

       queryDeferred.resolve(mockResponse); 
       $rootScope.$apply(); 


       expect(resolvespy).toHaveBeenCalledWith(mockResponse); 
       expect(rejectspy).not.toHaveBeenCalled(); 

      }); 

      it('Then the mock service should have returned the correct response', function() { 

       expect($scope.test).toBe(mockResponse); 
      }); 

      it('Then the mock service should have returned the correct response', function() { 

       expect($scope.testfunction).toBeDefined(); 
      }); 

      it("should do something else when something happens", function() { 
       $scope.testfunction(); 
       expect($scope.value).toBe('value'); 
      }); 
     }); 

}); 

답변

19

재스민 2.0 사용하면 교체해야합니다 :

andCallThrough(); 

로 :

and.callThrough(); 

참조 : Jasmine 2.0 documentationUpgrading to 2.0 내 작업 코드 내 질문에 업데이트

+0

. 나는 너에게 제안한 변화를 만들었다. –

관련 문제