4

我有以下 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. 调用正确的 url(在这种情况下,它的ViewRecord/GetSoftwareChoice
  2. 并且,预期的输出(在这种情况下, function(data))表现正确?

知道如何用QUnit做到这一点吗?

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

4

3 回答 3

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();
于 2009-07-15T05:55:50.600 回答
0
  1. 在您的测试中覆盖 $.getJSON 以断言传入的 url 是正确的。如果您经常需要这样做,您可以创建一个辅助函数来覆盖 getJSON 并声明 url。确保在断言之后调用默认实现。此外,在断言 url 之后, stop() 测试。

使用启动测试并调用回调的函数包装传入的回调。

开始测试。

触发点击#username。

编辑:

这可能会有所帮助: QUnit with Ajax,QUnit 通过了失败的测试

于 2009-06-16T15:48:14.270 回答
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

于 2013-09-03T07:28:41.207 回答