2014-01-11 26 views
3

JS文件如何qunit测试功能依赖于事件在煅烧

window.onload = function() { 
    document.getElementById('example').addEventListener('mousedown', myFunction, false); 
}; 

function myFunction(e) { 
    x = e.clientX-parseInt(document.getElementById('example').offsetLeft); 
    window.addEventListener('mousemove', anotherFunction, true); 
} 

试图找出如何使用QUnit测试。该页面不使用jQuery,只是直接使用JavaScsript。正如你所看到的,onload包括一个被添加到元素的eventlistener,并且当这个鼠标事件被触发时,myFunction函数被调用。 qunit代码请。

+0

你想测试事件发生时的功能是否被解雇或你想测试函数本身? – tkone

+0

感谢您的询问!我想确保我符合函数的代码覆盖范围,但函数不会返回任何内容,所以我假设事件需要被触发 – jsteinmann

回答

0

在我看来,这应该是两个测试:

一:你想测试,以确保事件侦听器正确连接。为此,您可以覆盖myFunction(或使用sinon之类的间谍)。然后触发鼠标点击(请参阅MDN for triggering events)。

然后,对于下一个功能,执行相同的操作只需附加间谍或覆盖anotherFunction,然后直接调用您的方法。

**编辑信息关于SPIES **

如果你有兴农加载,myFunction是在范围上可用,你让myFunction的间谍。

From the docs for spiesevent triggering

test('callback', function(){ 
    sinon.spy(myFunction); 
    // or 
    var oldFunc = myFunction; 
    myFunction = function(){ 
     ok(true, true, 'function called'); 
    } 
    var event = new MouseEvent('down', { 
     'view': window, 
     'bubbles': true, 
     'cancelable': true 
    }); 

    // trigger event 
    document.getElementById('example').dispatchEvent(event); 

    ok(myFunction.called, true, 'function called'); 
    myFunction.restore(); 
    //or 
    myFunction = oldFunc; 
}); 
+0

谢谢。你有使用重写的代码示例吗? – jsteinmann

+0

@jsteinmann更新了一个关于如何使用sinon创建一个间谍 – tkone

+0

很酷的qunit示例的答案。我从来没有使用过sinon,我不知道在这种情况下使用图书馆是否会起作用。你能展示一种测试覆盖的方法吗? – jsteinmann