2013-07-16 3 views
0

Итак, вот сделка: у меня есть один iframe в mypage.html. Используя jQuery, я смотрю на http://mysite.com/rest/foo (открытая служба REST) ​​и получаю ответ XML обратно, в котором содержится URL-адрес. Я установил для этого URL атрибут iframe src.Как я могу тестировать JS, который использует REST API?

Вопрос в том, как я могу его протестировать (используя QUnit и Sinon.js)? Я очень новичок в модульном тестировании в целом, поэтому мне хотелось бы услышать более опытные мнения и примеры.

script.js:

$(document).ready(function() { 

    function setUrl(url) 
    { 
     $('iframe').attr('src', url); 
    } 

    function throwError() 
    { 
     // Error handling 
    } 

    function myCallback(response) 
    { 
     var url = $(response).find("url"); 

     if (!url.text()) throwError(); 
     else setUrl(url.text()); 
    } 

    function bar(restLocation, callback) 
    {  
     $.get("http://mysite.com/rest/" + restLocation, callback); 
    } 

    bar("foo", myCallback); 
}); 

В частности, я задаюсь вопросом о следующих вещах:

  1. Я предполагаю, что мне нужно, чтобы выставить все эти функции в глобальное пространство имен, чтобы проверить их. Это абсолютно необходимо, или есть способ проверить их, пока он находится в функции document.ready()?

  2. Какую функцию необходимо проверить? bar() действительно делает только одно: сделать вызов AJAX/rest/foo /, а затем позвонить myCallback, а другие - вспомогательные методы (если бы я писал это на Java или C#, они, вероятно, были бы частными) ... я должен проверить их тоже? Конечный пользователь (тот, кто просматривает mypage.html) технически даже не имеет выбора, на какой адрес REST указывать.

  3. Я полагаю, некоторые подходящие тестовые случаи могут быть

    • Если действительный restLocation передается bar(), то IFrame ЦСИ должен быть установлен.
    • Если недопустимый restLocation передан, необходимо обработать ошибку (в виде загрузки 404 или что-то еще)
    • Если сервер не работает, обработайте ошибку.
    • Что-нибудь еще?

К сожалению, если я пытаюсь сделать $('iframe').attr('src'), он возвращает undefined. Если я попытаюсь использовать prop(), я получаю пустую строку. Как я могу проверить, правильно ли установлен src?

Извините за длинный вопрос. Я просто немного смущен тем, какие тесты делают «хороший» модульный тест, и как можно было бы проверить ситуацию в этой ситуации.

+0

Является ли это на самом деле тестовый модуль, если вы звоните в REST API?Если бы это было что-то еще, я бы выделил код, обрабатывающий результаты вызова REST и код, который фактически вызывает вызов REST; а затем Unit проверит код, обрабатывающий результаты. Есть арендатор модульного тестирования, который кажется применимым: не проверяйте код, который у вас нет. –

ответ

0

Во-первых, вы должны поставить функцию, проходящую в функцию read в имени функции, так что вы можете назвать это так

$(document).ready(myFunction) 

Теперь вы называете MYFUNCTION в тесте без необходимости издеваться функцию $.ready.

Тест будет выглядеть следующим образом:

test(sets the iFrameUrl", function() { 
    var server = sinon.fakeServer.create(); 
    server.respondWith('responseUrl'); 
    server.autoRespond = true; 
    $('body').append('iframe') 
    myFunction(); 
    equal($('iframe').attr('src'), 'responseUrl', 'iframe url') 
}) 
+0

Спасибо. В конце концов, я просто переделал все это и принял некоторые из ваших предложений для тестов. – dashik

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