Angularjs 控制器内返回未定义的模拟服务
我试图测试一些非常简单的东西:一个调用执行http请求的服务的控制器 控制器:Angularjs 控制器内返回未定义的模拟服务,angularjs,unit-testing,jasmine,karma-jasmine,angularjs-controller,Angularjs,Unit Testing,Jasmine,Karma Jasmine,Angularjs Controller,我试图测试一些非常简单的东西:一个调用执行http请求的服务的控制器 控制器: define(['module'], function (module) { 'use strict'; var MyController = function ($scope, MyService) { $scope.testScope = 'karma is working!'; MyService.getData().then(function (data)
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 ];
});
测试:
解决了问题-使用Jasmine 1x。。升级到2.0并按预期工作我假设方法第5行变量赋值中的小写版本也是一个打字错误,是吗?下一步我要做的是确认“未定义”是什么——spyOn、myService或spyOn的返回值。这可能会给你一个关于遗漏什么的线索。对,这是我问题中的一个输入错误。已更新。如何确认未定义的是什么?您使用的是什么版本的茉莉花?该语法对于2.0版是正确的。对于版本1x,它将是andReturn.@AndryHasit-使用版本1x
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')