0

我想測試一些非常簡單的事情:一個控制器調用執行http請求的服務。控制器模擬服務返回未定義

控制器:

define(['module'], function (module) { 
    'use strict'; 

    var MyController = function ($scope, MyService) { 

     $scope.testScope = 'karma is working!'; 

     MyService.getData().then(function (data) { 
      $scope.result = data.hour 
     }); 
    };  

    module.exports = ['$scope', 'MyService', MyController ]; 
}); 

測試:

define(['require', 'angular-mocks'], function (require) { 
'use strict'; 

var angular = require('angular'); 

describe("<- MyController Spec ->", function() {  

    var controller, scope, myService, serviceResponse; 

    serviceResponse= { 
     id: 12345, 
     hour: '12' 
    }; 

    beforeEach(angular.mock.module('myApp')); 

    beforeEach(inject(function (_$controller_, _$rootScope_, _MyService_, $q) { 
     scope = _$rootScope_.$new(); 
     var deferred = $q.defer(); 
     deferred.resolve(serviceResponse); 

     myService = _MyService_; 
     spyOn(myService, 'getData').and.returnValue(deferred.promise); 

     controller = _$controller_('MyController', {$scope: scope}); 
     scope.$apply(); 
    })); 

    it('should verify that the controller exists ', function() { 
     expect(controller).toBeDefined(); 
    });  

    it('should have testScope scope equaling *karma is working*', function() { 
     expect(scope.testScope).toEqual('karma is working!'); 
    }); 
}); 

});

通過上述,我得到的錯誤:

TypeError: 'undefined' is not an object (evaluating 'spyOn(myService, 'getData').and.returnValue') 
+1

我在變量假設小寫形式方法第5行的任務也是錯字,是嗎?下一步我要確認'undefined'是什麼 - spyOn,myService或者spyOn的返回值。這可能會讓你知道缺少的東西。 –

+0

正確,在我的問題中是一個錯字。已更新。 –

+0

我如何確認undefined是什麼? –

回答

0

解決的問題 - 用茉莉花1X ..升級到2.0及按預期工作