2012-04-08 2 views
4

Я разработчик интерфейса и новый для TDD и BDD.Изучение модульного тестирования и Жасмин

У меня есть эта задача. Заполните таблицу с json-объектом, полученным от вызова AJAX. Как бы я описал это в наборе и спецификации?

Заранее спасибо

EDIT

Я использую BackboneJS для MVC и sinon.js шпионов, окурки и т.д.

ответ

2

Вы не упомянули о том, какие библиотеки вы используете, поэтому я просто продолжу и предположим, что ваш запрос ajax состоит из запроса GET с использованием jQuery.

Обычно это было бы что-то вроде:

$.ajax({ 
    url: 'http://server/populate_table', 
    data: {foo: 'bar'}, 
    success: populate_table 
}); 

Кроме того, я буду считать, что сервер будет возвращен следующий объект {row: [1, 2, 3]} Для начала вам нужно издеваться ответ AJAX, так как вы не хотите, чтобы полагаться на вашем сервере. Насмешливый, проверка параметров и поддельной возврата данных может быть достигнуто с помощью шпиона как таковой:

var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
    expect(options.url).toEqual('http://server/populate_table'); 
    expect(options.data.foo).toEqual('bar'); 
    options.success({row: [1, 2, 3]}; 
}); 

Обратите внимание, как выше определении ожиданий относительно URL и данных, которые должны быть получены сервером до вызывая обратный вызов с результатом.

Наконец, вам нужно выяснить, была ли заполнена ваша таблица. Вы не предоставляете никакой информации о данных или таблице, но, снова угадывая, что вы используете jQuery, вы должны попытаться сделать jasmine-jquery. С его помощью вы можете легко охарактеризовать ожидания своего DOM, взгляните на расширенные документы. После того, как вы оседают на то, что вы хотите проверить, ваш полный тест будет выглядеть так:

it('populates the table making a JSON call', function() { 
    var ajaxMock = spyOn($, 'ajax').andCallFake(function (options) { 
     expect(options.url).toEqual('http://server/populate_table'); 
     expect(options.data.foo).toEqual('bar'); 
     options.success({row: [1, 2, 3]}; 
    }); 

    $.ajax({ 
     url: 'http://server/populate_table', 
     data: {foo: 'bar'}, 
     success: populate_table 
    }); 

    expect($('#mytable')).toExist(); 
    // DOM specific expectations go here... 

}); 
0

Вы хотите посмотреть на asynchronous test объектов, построенных в жасмин.

В частности waitFor и run.

Чтобы быстро объяснить: вы можете запустить запрос Ajax и вернуть его при успешном выполнении. Вы ждете эту функцию, а затем запустите свой тест.

+0

Также обратите внимание на Mocking и заглушек, так как вы не можете запрос AJAX на самом деле пожар. Для них существует множество библиотек, таких как: http://sinonjs.org/ (я не использовал этот, но он выглядит довольно аккуратно) – d2kagw

+0

Все шпионские материалы, которые поставляют синоны, в жасмине, я считаю. Мы используем метод шпионажа только в жасмине. Мы хотим, чтобы запросы Ajax срабатывали - точка тестирования в нашем сознании заключается в том, чтобы точно воспроизводить то, что пользователь будет использовать с помощью нашего кода. – tkone

0

Поскольку вы уже используете sinon.js, я думаю, что лучший подход будет использовать fakeServer для тестирования объектов, полученных от Ajax звонки , Это очень хорошо описано здесь (Fake Ajax и поддельные серверы раздел):

http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html

Смежные вопросы