单元测试angularjs指令监听事件
Unit testing angularjs directive listening to an event
我创建了一个监听事件并更新其内容的指令,如下所示:
$rootScope.$on(event, function(e, msg) {
vm.items = msg.data;
});
我想为此创建一个单元测试,我知道如何测试指令是否广播,但我不知道如何测试指令是否在监听。
下面是我如何测试指令是否在监听:describe('input directive', function() {
var ctrl,
$rootScope;
beforeEach(function() {
module('hey.ui');
inject(function($compile, _$rootScope_) {
$rootScope = _$rootScope_;
var elem = $compile('<m-search></m-search>')($rootScope.$new());
$rootScope.$digest();
ctrl = elem.controller('mSearch');
spyOn($rootScope, '$broadcast');
})
});
it('broadcasts e:input-valuechanged on change', function() {
var inputVal = {input: 'input string'};
ctrl.onChange(inputVal);
expect($rootScope.$broadcast).toHaveBeenCalledWith('e:input-valuechanged', {data: inputVal});
});
});
我在想一个非常愚蠢的测试方法,像这样:
describe('list directive', function() {
var ctrl,
$rootScope;
beforeEach(function() {
module('hey.ui');
inject(function($compile, _$rootScope_) {
$rootScope = _$rootScope_;
var elem = $compile('<ecal-list></ecal-list>')($rootScope.$new());
$rootScope.$digest();
ctrl = elem.controller('mList');
spyOn($rootScope, '$broadcast');
})
});
it('should listen to $broadcast', function() {
$rootScope.$broadcast('e:input-valuechanged');
var eventEmitted = false;
$rootScope.$on('e:input-valuechanged', function() {
eventEmitted = true;
console.log(eventEmitted);
});
//run code to test
expect(eventEmitted).toBe(true);
});
});
如何测试一个指令是否正在监听一个特定的事件?
我相信你想在广播前收听e:input-valuechanged
事件;
it('should listen to $broadcast', function() {
var eventEmitted = false;
$rootScope.$on('e:input-valuechanged', function() {
eventEmitted = true;
console.log(eventEmitted);
});
$rootScope.$broadcast('e:input-valuechanged');
//run code to test
expect(eventEmitted).toBe(true);
});
相关文章:
- 如何在AngularJS中监听点击事件,而不是触摸事件
- 监听touchend有时会触发移动点击事件
- jQuery有没有,或者有没有jQuery插件,内置了监听CSS3动画事件的功能(例如animationEnd)
- 如何让Google Maps API v3监听dragend事件并在投递时填充表单字段
- 如何在angular js中监听dom就绪事件
- React鼠标事件在没有监听它们的组件上触发
- 如何在具体化 CSS 中监听<选择>更改事件
- 如何将誓言令牌推送到本地存储或本地会话并监听存储事件?(SoundCloud Php/JS 错误解决方法)
- 有没有办法在 asp.net MVC 3 中使用 JavaScript、Jquery 监听事件
- 一个“;监听路由器”;(响应视图/模型中的路由器事件)
- 谷歌聚合物监听火灾事件从未发生过
- 套接字.特定房间的IO事件监听
- larav 's事件监听和发射
- 什么's为href和'添加void(0)的效果;return false'锚点标记的点击事件监听
- 从DOM元素上的事件监听切换
- 在Angular中把事件监听放在哪里?
- JS-键盘事件-监听/取消监听
- 关于Kinetic JS的事件监听
- 如何在事件监听时在两个函数之间切换的标记中使用事件监听器
- Nodejs:如何处理对象之间的事件监听