【发布时间】:2016-06-16 17:25:50
【问题描述】:
在angular docs的指令部分
他们粗略地提供了如何制作拖曳物的示例。
我的问题是您将如何测试他们的示例/实现:
var startX = 0, startY = 0;
scope.x = 0;
scope.y = 0;
element.css({
top: scope.y,
left: scope.x
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
startX = event.pageX - scope.x;
startY = event.pageY - scope.y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
scope.y = event.pageY - startY;
scope.x = event.pageX - startX;
element.css({
top: scope.y + 'px',
left: scope.x + 'px'
});
}
function mouseup() {
$document.off('mousemove', mousemove);
$document.off('mouseup', mouseup);
}
}
但这仅适用于单个事件。
Angular 的示例使用 mousedown 添加 mousemove 和 mouseup 事件侦听器,this stackoverflow answer 使用 triggerHandler-- 防止冒泡/传播。
现在我有(大致):
describe('on mousedown it', function(){
it('moves a thing', function(){
expect(scope.x).toBe(0);
element.triggerHandler({type: 'mousedown', pageX: 0, pageY:0});
element.triggerHandler({type: 'mousemove', pageX:10, pageY:10);
expect(scope.x).toBe(10);
});
});
测试失败。 scope.x 记录为 0。 做什么?
【问题讨论】:
-
fwiw 在 $document 上触发处理程序也不起作用
标签: angularjs unit-testing angularjs-directive jasmine