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

时间:2009-06-16 15:42:58

标签: 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>

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

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

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

  1. 调用正确的网址(在本例中为ViewRecord/GetSoftwareChoice
  2. 并且,预期输出(在这种情况下,function(data))行为正确吗?
  3. 知道如何使用QUnit执行此操作吗?

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

3 个答案:

答案 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)

  1. 在您的测试中覆盖$ .getJSON以断言传入的url是正确的。如果你需要做很多事情,你可以创建一个帮助函数来覆盖getJSON并断言url。确保在断言后调用默认实现。 此外,在断言url后,停止()测试。
  2. 使用启动测试的函数包装传入的回调,并调用回调。

    开始测试。

    触发点击#username。

    编辑:

    这可能会有所帮助: QUnit with Ajax, QUnit passes the failing tests

答案 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