ジャスミンテストでコントローラのプロパティにアクセスしようとしていますが、テストを設定する際に問題があります。ここでジャスミンがangularjsにアクセスできない1.5コントローラのプロパティ
は、コントローラです。ここ
adminApp.controller('AdminClientController', [function() {
var adminClient = this;
adminClient.name = 'Client Name';
adminClient.sites = [
{
id: "site1",
domain: "myschool.com",
pages: [
{
id: 1,
name: "HOME"
},
{
id: 2,
name: "FORM"
}
]
}
]
}]);
は仕様です:
describe('AdminClientController', function() {
beforeEach(module('adminClientApp'));
var $scope, $controller;
beforeEach(inject(function(_$controller_, _$rootScope_){
$rootScope = _$rootScope_;
$controller = _$controller_;
$scope = $rootScope.$new();
}));
describe('site pages', function() {
beforeEach(function() {
//$scope = {};
controller = $controller('AdminClientController as adminClient', {
$scope: $scope });
});
it('should create a site model with 2 pages', function() {
expect(controller.adminClient.sites[0].pages.length).toBe(2);
});
});
});
エラー:
TypeError: Cannot read property 'sites' of undefined
は、以前私が私がいても($の範囲を初期化してみましたコントローラーで明示的に使用していない)、contollerを構文として使用していませんでした。
beforeEach(function() {
$scope = {
adminClient: {
sites: [
{
id: "site1",
domain: "myschool.com",
pages: [
{
id: 1,
name: "HOME"
},
{
id: 2,
name: "FORM"
}
]
}
]
}
};
controller = $controller('AdminClientController', {
$scope: $scope });
});
は、私はちょうどテストを始め、早期にそれを使用したいか、そうでなければ、後に起こることはありませんよ。私が見つけた他のSOの質問は私を助けなかった。
ありがとうございます!
あなたがそれを必要としないので、あなたは、あなたのコントローラの範囲に渡していません。これを試してみてください:controller = $ controller( 'AdminClientController'、{});これを次のように参照してください:controller.sites [0] .pages.length – ScottL
ありがとう@ScottL! –