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 に答える