2009-06-16 79 views
4

我有以下的HTML代码:QUnit单元测试:测试鼠标点击

<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 examples,但他们似乎在处理一个没有AJAX交互的简单场景。虽然there are ASP.NET MVC examples,但我认为他们真的测试服务器的输出到AJAX调用,即它仍在测试服务器响应,而不是AJAX响应。我想要的是如何测试客户端响应。

+0

不是很多,我害怕;我真的不知道如何开始。 – Graviton 2009-06-16 15:53:47

回答

0
  1. 重写$ .getJSON在您的测试中声明传入的url是正确的。如果你需要做很多事情,你可以创建一个帮助函数来覆盖getJSON并声明url。确保在声明后调用默认实现。 另外,在断言url之后,停止()测试。

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

开始测试。

触发点击#username。

编辑:

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

+0

好的,有无论如何要传回虚拟数据? – Graviton 2009-06-16 15:56:09

+0

你是什么意思'传回',在哪里?以及什么虚拟数据? – mkoryak 2009-06-16 15:56:51

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(); 
0

你并不总是想取得真正的阿贾克斯电话。在这种情况下,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调用的请求,您可以测试点击就可以测试其他行为。

Ps。你用结果“覆盖”ajax调用。 Ps2。 Mockjax可以在这里找到:https://github.com/appendto/jquery-mockjax