用JavaScript测试用户交互

用JavaScript测试用户交互,javascript,testing,bdd,lettuce,js-test-driver,Javascript,Testing,Bdd,Lettuce,Js Test Driver,我无法让莴苣/Splinter或JsTestDriver运行与主干生成的DOM对象的用户交互测试。例如,在,我想模拟用户单击标记为“添加列表项”的按钮,然后验证文本“hello world1”的元素是否已出现 JsTestDriver:我可以获取对button元素的引用并对其调用click(),但随后document.getElementsByTagName(“li”)失败(或返回null?) Johansen's excellent说,测试事件处理程序并不是一项恰当的单元测试任务。所以我尝试了

我无法让莴苣/Splinter或JsTestDriver运行与主干生成的DOM对象的用户交互测试。例如,在,我想模拟用户单击标记为“添加列表项”的按钮,然后验证文本“hello world1”的
  • 元素是否已出现

    JsTestDriver:我可以获取对button元素的引用并对其调用
    click()
    ,但随后
    document.getElementsByTagName(“li”)
    失败(或返回null?)

    Johansen's excellent说,测试事件处理程序并不是一项恰当的单元测试任务。所以我尝试了Django的BDD(?)工具:

    莴苣/Splinter/Django:Splinter Browser对象看不到按钮中的文本,更不用说获取对它的引用或单击它了。(它对通过HTML创建的元素处理这些操作。)world.browser.is_text_present()和find_by_id()都不起作用;给前者等待一段时间也无济于事


    我真的希望避免直接使用Selenium,我认为这些工具使它变得不必要。那么现在该怎么办呢?

    虽然触发DOM事件在技术上可能不是“单元测试”,但这并不意味着您不能使用单元测试框架来完成它:)这更像是一种定义


    无论如何,您可以使用JsTestDriver实现您想要的功能,但我建议不要通过手动方式来实现,例如
    click()
    (这可能无法实现您期望的功能)。我通常使用jQuery触发事件,这可以通过JsTestDriver等安全地完成。即使您在生产代码中不使用jQuery,这也应该可以工作。

    虽然触发DOM事件在技术上可能不是“单元测试”,但这并不意味着您不能使用单元测试框架来完成它:)这更像是一种定义


    无论如何,您可以使用JsTestDriver实现您想要的功能,但我建议不要通过手动方式来实现,例如
    click()
    (这可能无法实现您期望的功能)。我通常使用jQuery触发事件,这可以通过JsTestDriver等安全地完成。即使您在生产代码中不使用jQuery,这也应该是可行的。

    Thx,但我并不完全遵循。您是否建议我使用jQuery获取对目标元素的引用,然后调用click()?或者我更复杂地使用jQuery事件模型来调用事件?对于后者,我必须温习一下jQuery。是的,click()的行为与我预期的不一样。您是否想到jquery.simulate.js库,w/jquery和QUnit?因为我确实做到了。谢谢,但我不完全明白。您是否建议我使用jQuery获取对目标元素的引用,然后调用click()?或者我更复杂地使用jQuery事件模型来调用事件?对于后者,我必须温习一下jQuery。是的,click()的行为与我预期的不一样。您是否想到jquery.simulate.js库,w/jquery和QUnit?因为我确实做到了。你还在寻找答案吗?我不想让僵尸复活。你还在寻找答案吗?我不想让僵尸复活。