QUnit Unit Testing: Тестирование мыши - PullRequest
4 голосов
/ 16 июня 2009

У меня есть следующий 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. То, что я хочу, это как проверить ответ на стороне клиента.

Ответы [ 3 ]

6 голосов
/ 15 июля 2009

Вы можете заменить свой анонимный обработчик события вызовом функции, а в своих тестах вы можете просто вызвать эту функцию.

Так что вместо

$("#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 голосов
/ 03 сентября 2013

Вы не всегда хотите совершать реальные 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, вы можете протестировать щелчок и проверить другое поведение.

Ps. Вы «переопределяете» вызов ajax своим результатом. Ps2. Mockjax можно найти здесь: https://github.com/appendto/jquery-mockjax

0 голосов
/ 16 июня 2009
  1. переопределите $ .getJSON в вашем тесте, чтобы утверждать, что переданный в URL корректен если вам нужно сделать это много, вы можете создать вспомогательную функцию, которая переопределяет getJSON и устанавливает URL-адрес. Обязательно вызовите реализацию по умолчанию после вашего утверждения. Кроме того, после того, как вы подтвердите URL, остановите () тест.

Обернуть переданный обратный вызов функцией, которая запускает тест и вызывает обратный вызов.

Запустите тест.

вызвать клик по имени пользователя.

Edit:

Это может помочь: QUnit с Ajax, QUnit проходит неудачные тесты

...