我有以下HTML代码:
<div id="main">
<form Id="search-form" action="/ViewRecord/AllRecord" method="post">
<div>
<fieldset>
<legend>Search</legend>
<p>
<label for="username">Staff name</label>
<input id="username" name="username" type="text" value="" />
<label for="softype"> software type</label>
<input type="submit" value="Search" />
</p>
</fieldset>
</div>
</form>
</div>
以下Javascript代码(使用JQuery作为库):
$(function() {
$("#username").click(function() {
$.getJSON("ViewRecord/GetSoftwareChoice", {},
function(data) {
// use data to manipulate other controls
});
});
});
现在,如何测试$("#username").click
以便对于给定的输入,
ViewRecord/GetSoftwareChoice
)function(data)
)行为正确吗?知道如何使用QUnit执行此操作吗?
编辑:我读了QUnit examples,但他们似乎正在处理一个没有AJAX交互的简单场景。虽然there are ASP.NET MVC examples,但我认为他们确实在测试服务器的输出到AJAX调用,即,它仍在测试服务器响应,而不是AJAX响应。我想要的是如何测试客户端响应。
答案 0 :(得分:6)
您可以使用函数调用替换您的匿名事件处理程序,然后在测试中您可以调用该函数。
所以而不是
$("#username").click(function() {
$.getJSON("ViewRecord/GetSoftwareChoice", {}, function(data) {
// use data to manipulate other controls
});
});
您可以执行类似
的操作function doSomething() {
$.getJSON("ViewRecord/GetSoftwareChoice", {}, function(data) {
// use data to manipulate other controls
});
}
$("#username").click(doSomething);
然后在你的QUnit测试中你可以调用
doSomething();
答案 1 :(得分:0)
使用启动测试的函数包装传入的回调,并调用回调。
开始测试。
触发点击#username。
编辑:
答案 2 :(得分:0)
你并不总是希望进行真正的ajax调用。在这种情况下,mockjax是一个很好的解决方案。 您可以在测试中指定返回值。因此,您无需实施或其他文件即可请求信息。
在你的情况下,它可以是这样的:
$.mockjax({
url: '/ViewRecord/GetSoftwareChoice',
responseTime: 750,
responseText: {
status: 'success',
result: 'your data can be put here' //in that case it is data.result with value string
}
});
你可以测试ajax调用的请求,你可以测试点击,你可以测试其他行为。
聚苯乙烯。你用你的结果“覆盖”ajax调用。 PS2。可在此处找到Mockjax:https://github.com/appendto/jquery-mockjax