我使用module().controller()
语法创建我的控制器。
angular.module('App', []);
angular.module('App').controller('PhoneListCtrl', ['$scope', function ($scope) {
'use strict';
$scope.phones = [
{
"name": "Nexus S",
"snippet": "Fast just got faster with Nexus S."
},
{
"name": "Motorola XOOM™ with Wi-Fi",
"snippet": "The Next, Next Generation tablet."
},
{
"name": "MOTOROLA XOOM™",
"snippet": "The Next, Next Generation tablet."
}
];
}]);
这很有效。但是现在我想用茉莉花来测试它,我的测试用
来回应 ReferenceError: AppController is not defined
。
我的测试:
/* jasmine specs for controllers go here */
describe('PhoneCat controllers', function () {
describe('PhoneListCtrl', function () {
it('should create "phones" model with 3 phones', function () {
var scope = {},
ctrl = new PhoneListCtrl(scope);
expect(scope.phones.length).toBe(3);
});
});
});
如果我将控制器更改为经典功能,测试工作正常。
我缺少什么?
答案 0 :(得分:1)
在测试中,您不应“手动”创建控制器实例,而是让AngularJS使用$controller
服务创建实例。这是必要的,因为AngularJS DI系统需要有机会注入依赖关系。
您的测试应大致如下:
beforeEach(module('App'));
it('should create "phones" model with 3 phones', inject(function ($controller, $rootScope) {
var ctrl = $controller('PhoneListCtrl', {$scope: $rootScope});
expect($rootScope.phones.length).toBe(3);
}));
答案 1 :(得分:-1)
对于想要实例化新范围并使用它的人:
var ctrl = $scope.$new();
$controller('PhoneListCtrl', {$scope: ctrl});
expect(ctrl.phones.length).toBe(3);