1

我正在使用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);
        });
    });
});

如果我将控制器更改为经典功能,测试工作正常。

我错过了什么?

4

2 回答 2

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);
 }));
于 2013-03-08T19:48:13.103 回答
-1

对于希望实例化新范围并使用它的人:

    var ctrl = $scope.$new();
$controller('PhoneListCtrl', {$scope: ctrl});   
    expect(ctrl.phones.length).toBe(3);
于 2015-10-29T16:42:45.437 回答