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及按预期工作