我是QUnit的新手。我正在使用jQuery(使用1.4.2和1.5.1测试)和最新的QUnit。我可以在单个测试中触发事件,但之后的任何测试都会失败。这是一个简化的复制品:
// code under test - "#Test1" is just an empty div
$(document).ready(function() {
$('#Test1').mouseenter(function(e) { console.log('ENTER');});
$('#Test1').mouseleave(function(e) { console.log('LEAVE');});
});
// tests
test('enter', function() {
$('#Test1').mouseenter();
});
test('leave', function() {
$('#Test1').mouseleave();
});
当我运行测试时,控制台仅输出ENTER。但是,如果我使用单一测试...
test('enterleave', function() {
$('#Test1').mouseenter();
$('#Test1').mouseleave();
});
...控制台输出ENTER和LEAVE。我尝试过使用QUnit的triggerEvent,jQuery.trigger等无济于事。此问题在多个浏览器上进行了重复。我是否正确测试了事件?
在这里完全重复:http://jsbin.com/obehu5/edit。
答案 0 :(得分:2)
一旦触发发生,QUnit似乎正在清除元素的事件绑定。我通过将“init”代码移动到QUnit设置中来解决此问题。我不确定这是不是一个好的做法,但似乎已经解决了这个问题。我还修复了上面的示例:http://jsbin.com/obehu5/5/。
答案 1 :(得分:0)
将您的ID更改为班级。 每页只允许我唯一的id,所以jquery停止查看第一个id,并且函数永远不会在第二次出现时被触发。
$(document).ready(function(){
//change the id to a class
$(".test1").mouseenter(function(){
console.log("enter");
});
$(".test1").mouseleave(function(){
console.log("leave");
});
});
答案 2 :(得分:0)
首先尝试创建一个事件对象
实施例,
var e = jQuery.Event("keydown", true);
e.which = 40; // down key
e.stopImmediatePropagation();
然后在你的测试中
$('#testEmpty').trigger( e ); // down
没有stopImmediatePropagation我的测试也因多次调用而失败。这可能会有所帮助。