我正在为指令控制器编写测试,其启动逻辑需要定义一些单向绑定参数。我遇到了将单向绑定参数传递给模拟控制器的困难。文本绑定参数可以毫无困难地传递。
注意:在以下代码中,我跳过了模块注入和代码中其他不相关的部分
以下是指令的定义,包含两种类型的参数:
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');
});
当text
正确传递给$ controller时,oneWay
未定义且测试失败。我也尝试传递一个函数返回一个对象无济于事。 documentation不包含单向绑定参数。如果不测试指令并将参数作为标记传递,你知道怎么做吗?一般来说,我喜欢分开测试和测试指令及其控制器。
答案 0 :(得分:0)
如果将oneWay设为可选,在其定义中添加问号,该怎么办:
oneWay: '&?'