在茉莉花单元测试中模拟鼠标悬停?

时间:2015-02-17 11:19:18

标签: javascript jquery jasmine phantomjs mouseover

道歉,如果在其他地方有这个问题,那就很难在搜索中找到全面的结果。

我有一个Javascript应用程序,在鼠标悬停时对某些元素有音频描述。这些是使用鼠标悬停监听器实现的(伪代码!)

  menuOption.addEventListener("mouseover", function(){
    audio.play("menuoption"); 
  });

在我的测试中,我有类似的东西:

  spyOn(audio, "play")

  menuOption.mouseover()

  expect(audio.play.calls.count()).toBe(1);

这个鼠标悬停似乎没有开火。我正在使用茉莉和幻影。当我将鼠标悬停更改为单击时,它可以正常工作,所以我倾向于认为我的测试很好并且鼠标悬停是个问题吗?

1 个答案:

答案 0 :(得分:0)

正如element.click()不标准一样,element.mouseover()也是如此。您可以尝试显式生成事件(基于to this answer torazaburo):

function mouseover(el){
    var ev = document.createEvent("MouseEvent");
    ev.initMouseEvent(
        "mouseover",
        true /* bubble */, true /* cancelable */,
        window, null,
        0, 0, 0, 0, /* coordinates */
        false, false, false, false, /* modifier keys */
        0 /*left*/, null
    );
    el.dispatchEvent(ev);
}
mouseover(menuOption);