【发布时间】:2014-10-08 12:32:51
【问题描述】:
我在调整 this test 以使用“controller as”语法时遇到了一些问题。这就是我所拥有的......
我正在测试的控制器是:
function MyCtrl ($scope, someService) {
someService.get()
.success(function(data){
$scope.person = data;
});
}
angular.module('myApp')
.controller('MyCtrl', MyCtrl);
单元测试是:
beforeEach(module('myApp'));
var scope,
fakeService,
controller,
q,
deferred;
beforeEach(function () {
fakeService = {
get: function () {
deferred = q.defer();
deferred.resolve({ "test": "data" });
return deferred.promise;
}
};
spyOn(fakeService, 'get').and.callThrough();
});
beforeEach(inject(function ($controller, $q, $rootScope) {
q = $q;
scope = $rootScope.$new();
controller = $controller('MyCtrl as person', { $scope: scope, someService: fakeService });
}));
it('The person object is not defined yet', function () {
expect(scope.person).not.toBeDefined();
});
scope.person 的此测试失败并出现错误 TypeError: undefined is not a function。
我尝试了this solution,将expect(scope.person) 更改为expect(scope),但返回TypeError: undefined is not a function。
我正在使用 AngularJS 1.2.22、Karma 0.12.21 和 0.2.2 的 karma-jamsine 插件。
提前感谢您提出的任何建议。
【问题讨论】:
-
fakePwsService != fakeService
-
已编辑以修复 fakePwsService != fakeService 错字
标签: angularjs unit-testing controller jasmine karma-runner