2015-01-29 5 views
4

Я думал, что сделал хороший прогресс, закодировав Jasmine, как это. Но я не мог исправить эту ошибку.Неопределенная функция Ошибка при использовании Jasmine

Как работает метод 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 

Update:

Я отправляю это рабочий код в качестве ответа. Я исправил несколько вопросов.

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 documentation и Upgrading to 2.0

+0

Я обновил свой вопрос с моим рабочим кодом. Я сделал предложенное вами изменение. –

Смежные вопросы