【发布时间】:2014-06-19 00:18:36
【问题描述】:
我有一个带有如下按钮的 html 页面:
<input id='btnSubmit' type='button'/>
触发在 document.ready 函数中定义的点击处理程序,如下所示:
$(document).ready(function () {
$("#btnSubmit").click(function () {
$.ajax({
url: myUrl,
data: { 'startDate': startDateId, 'endDate': endDateId },
dataType: "json",
type: "POST",
cache: false,
success: function (data) {
alert('yay!');
},
error: function (request, status, error) {
LogError(request, startDate, error);
location.href = "error/error";
}
});
}
}
现在我想用 QUnit 测试这个功能,所以我在一个单独的 html 文件中构建了以下单元测试,该文件引用了包含上述代码块的 .js 文件:
QUnit.test("Test", function (assert) {
var fixture = $("#qunit-fixture");
fixture.append("<input type='button' id='btnSubmit'/>");
$("#btnSubmit").trigger("click");
assert(something);
});
我在这个文件中有许多其他测试都可以正常执行,但是每当我尝试创建一个测试来执行 qunit-fixture 中元素的事件处理程序时,它都无法调用实际的处理程序。
我知道我需要模拟 ajax 调用才能真正测试此功能。但我首先需要确定如何触发事件。如何使用 qunit 正确触发和测试事件?
【问题讨论】:
-
事件处理程序在页面加载时添加到按钮中,并且您正在测试中添加一个按钮。我认为事件处理程序未添加到您的测试中添加的按钮中。您可以在单元测试中将事件处理程序添加到按钮或使用其他工具来测试事件处理(如Selenium)。
标签: jquery unit-testing qunit