QUnit单元测试:测试鼠标单击

Gra*_*ton 4 jquery qunit

我有以下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>
Run Code Online (Sandbox Code Playgroud)

以下Javascript代码(以JQuery作为库):

$(function() {
$("#username").click(function() {
        $.getJSON("ViewRecord/GetSoftwareChoice", {},
    function(data) {
       // use data to manipulate other controls
    });
    });
});
Run Code Online (Sandbox Code Playgroud)

现在,如何测试$("#username").click以便对于给定的输入,它

  1. 调用正确的url(在这种情况下,它的ViewRecord/GetSoftwareChoice)
  2. 并且,预期输出(在这种情况下, function(data))行为正确吗?

知道怎么用QUnit做到这一点

编辑:我阅读了QUnit示例,但他们似乎正在处理一个没有AJAX交互的简单场景.虽然有ASP.NET MVC示例,但我认为它们实际上是在测试服务器的输出到AJAX调用,即它仍在测试服务器响应,而不是AJAX响应.我想要的是如何测试客户端响应.

RaY*_*ell 6

您可以使用函数调用替换您的匿名事件处理程序,然后您可以在测试中调用该函数.

而不是

$("#username").click(function() {
    $.getJSON("ViewRecord/GetSoftwareChoice", {}, function(data) {
    // use data to manipulate other controls
    });
});
Run Code Online (Sandbox Code Playgroud)

你可以做点什么

function doSomething() {
    $.getJSON("ViewRecord/GetSoftwareChoice", {}, function(data) {
    // use data to manipulate other controls
    });
}

$("#username").click(doSomething);
Run Code Online (Sandbox Code Playgroud)

然后在你的QUnit测试中你可以调用

doSomething();
Run Code Online (Sandbox Code Playgroud)