起動ロジックで一方向のバインドされたパラメーターを定義する必要があるディレクティブのコントローラーのテストを作成しています。モックされたコントローラーに一方向のバインドされたパラメーターを渡すのに問題があります。テキストにバインドされたパラメーターは問題なく渡されます。
注: 次のコードでは、モジュール インジェクションおよびコードのその他の無関係な部分をスキップします。
以下は、2 種類のパラメーターを使用したディレクティブの定義です。
function DummyDirective() {
return {
restrict: 'E',
scope: {},
bindToController:
oneWay: '&',
text: '@'
},
templateUrl: 'path/to/template.html',
controller: 'GreatController',
controllerAs: 'vm'
};
}
そして、ここにコントローラーがあります:
function GreatController() {
var vm = this;
vm.treasure = '';
activate();
function activate() {
vm.treasure = fantastic(vm.oneWay);
}
function fantastic(crap) {
if(crap.stack) return 'gold';
}
}
テストに関しては:
var controller, $rootScope, $scope;
beforeEach(inject(function(_$controller_, _$rootScope_){
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
controller = _$controller_(
'GreatController',
{$scope: $scope},
{text: 'toGoodToBeTrue',
oneWay: {
stack: 'lotsOfIt',
}
}
);
}));
it('should do the job', function(){
expect(controller.treasure).toBe('gold');
});
whiletextは $controller に適切に渡されますが、oneWay定義されておらず、テストは失敗します。また、オブジェクトを返す関数を無駄に渡そうとしました。このドキュメントでは、一方向のバインドされたパラメーターについては説明していません。ディレクティブをテストしてパラメーターをマークアップとして渡すことなく、これを行う方法を知っていますか? 一般的に、私はテストに焦点を合わせ、ディレクティブとそのコントローラーを別々にテストすることを好みます。