Я пишу свой первый плагин jquery.Он сильно зависит от ajax-вызовов на сервер.Обычно вызовы ajax в плагине будут выполняться, как обычно, асинхронно.
Я использую qunit для тестирования.Моя первая попытка не удалась классическим способом:
test ('check asynchronous call', function ()
{
stop();
$.my_plugin('do asynchronous call');
start();
equal('expected val', var_set_after_async_call_finishes,
'async var set as expected?');
})
А именно, «равный» выполнялся до завершения асинхронного вызова.
Похоже, что я могу изменить код плагина двумя способами:
- напрямую вставить "start ()" в плагин (но это загромождает его кодом, который не должензапустить в производстве)
- добавить необязательный аргумент к my_plugin, который заставляет $ .ajax работать синхронно.
Я выбрал второй подход, добавив необязательный аргумент к my_plugin, которыйпри значении false запускает функцию ajax синхронно.Затем я изменил тест следующим образом:
test ('check asynchronous call', function ()
{
async = false;
$.my_plugin('do asynchronous call', async);
equal('expected val', var_set_after_async_call_finishes,
'async var set as expected?');
})
Это работает.
Но есть ли способ надежно протестировать плагин, не изменяя его код каким-либо образом?