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とAjax、QUnitは失敗したテストに合格します

于 2009-06-16T15:48:14.270 に答える