以下是一些Javascript,它在AngularJS指令的trigger
函数内调用jqLite的link
。
angular.
module('myApp').
directive('myDirective',
function($timeout) {
return {
link: function(scope) {
scope.resetChosenElements = function() {
$timeout(function() {
$('[chosen]').trigger('chosen:updated');
}, 0);
}
scope.resetChosenElements();
}
};
}
);
如何编写一个测试来检查在创建指令时是否调用trigger
而不监视$.trigger
? (我不想窥探$.trigger
,因为它捕获了对它的所有调用,包括那些形成其他指令的调用。)
有没有办法监视可以传递给element
的{{1}}参数?
编辑:我对link
间谍的评论似乎引起了混乱。我只是暗示,如果解决方案需要将element
添加到传递给element
的参数,那就没问题了。但是目前我没有用它,这就是为什么它被排除在参数列表之外。
答案 0 :(得分:1)
嘲笑trigger
函数,你可以监视element
的事件函数,因为@Michael Benford表示你没有在代码示例中使用element
,考虑到你的问题,似乎有点困惑:
此示例使用ChaiJS作为断言工具,使用SinonJS作为间谍/存根/模拟库您应该在spy
element
上添加customEvent
beforeEach(inject(function($rootScope, $compile, _$httpBackend_) {
$scope = $rootScope.$new();
compile = $compile;
$httpBackend = _$httpBackend_;
el = angular.element('<elementTemplateTag></elementTemplateTag>');
compile(elm)($scope);
spy = sinon.spy(el, "customEvent"); // Add spy on the event call
}));
afterEach(function(){
el.customEvent.restore(); //clean spy calls
});
it('element.customEvent() called once', function() {
el.trigger('customEvent');
$timeout.flush(); // release all timeouts
expect(el.customEvent.calledOnce()).to.be.true;
});
我希望这适合你。