7

我发现使用 jQuery 或原生元素触发函数来模拟实际用户事件变得越来越困难。例如,如果你有一个文本输入并且你不希望用户能够添加一个字符,你可以在事件上调用e.preventDefault()jQuery 规范化的事件对象keydown。但是,无法以编程方式验证此测试场景。

即使没有调用,以下测试也会通过,preventDefault因为 jQuery keydown 触发器不是“真实”事件。

input.val('test').trigger(jQuery.Event({
    which: 68
});
expect(input).toHaveValue('test');

如果没有正确的代码,这个测试应该会失败,因为输入的值应该是“testd”(68 是“d”的字符代码)。

有谁知道任何方法或库来模拟真实的浏览器 UI 事件?

4

4 回答 4

4

模拟真实事件是相当复杂的。您必须首先确定您需要哪种类型的事件并使用document.createEvent. 然后调用不同init*Event的来初始化事件对象。最后,用于element.dispatchEvent将事件分派给目标对象。

于 2011-07-21T04:19:54.807 回答
2

您可能想尝试使用 Selenium:http ://seleniumhq.org/

这是一个不错的概述: http ://blog.frontendforce.com/2010/05/unit-testing-in-javascript-selenium/

于 2011-07-21T02:26:03.437 回答
0

这是一个似乎保持最新状态的存储库:https ://github.com/mmonteleone/jquery.autotype

于 2014-02-12T14:34:36.027 回答
0

我相信 YUI 有一些代码可以做到这一点。下载他们的代码并看看。我相信它被称为simulate.js或类似的东西。或者,您可以看看 selenium 是如何做到的。

于 2011-07-22T13:52:49.627 回答