2013-05-24 3 views
2

У меня возникла проблема с тем, как Intern запускает тесты и пытается тестировать блоки, которые используют вызовы AJAX с помощью jQuery. Поскольку Intern обслуживает тестовый клиент на сервере WebDriver (в этом случае phantomjs --webdriver=8910), я заканчиваю тесты, запущенные на localhost:9000. Это, очевидно, вызывает проблемы с одинаковой исходной политикой.Тесты модулей Intern AJAX

Я могу обойти это и сделать междоменные запросы, но после того, как требуется cookie проверки подлинности, я заблокирован, потому что, очевидно, наш бэкэнд не устанавливает файлы cookie для localhost, поэтому у меня нет доступа к этим куки.

Я попытался изменить параметр proxyUrl, чтобы указать на наш сервер в нескольких различных перестановок, но до сих пор ничего не работало:

https://my.server.com/ 
https://my.server.com/js/ 
https://my.server.com/js/intern/ 
https://my.server.com/js/intern/client.html 
https://my.server.com/js/intern/client.html?config=tests/intern 

Просмотр журналов WebDriver Я заметил, что стажер говорит серверу груз http://localhost:9000/__intern/client.html?config=.... Я попытался установить proxyUrl на https://my.server.com/js/ и символическую ссылку __intern на номер intern, но либо тесты не запускаются, либо они не сообщаются до runner.js. В PhantomJS журналы, когда я бегу этот способ выглядеть примерно так:

[DEBUG - 2013-05-24T15:17:50.930Z] SessionReqHand - _postUrlCommand - Session '194ff0a0-c485-11e2-9c64-9986b0c95ae1' is about to load URL: https://my.server.com/js/__intern/client.html?config=tests%2Fintern&sessionId=194ff0a0-c485-11e2-9c64-9986b0c95ae1&reporters=webdriver 
[DEBUG - 2013-05-24T15:17:50.943Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: true 
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _oneShotCallback - onLoadFinished 
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - onLoadFinished: success 
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: false 
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _resetOneShotCallbacksDecorator 
[DEBUG - 2013-05-24T15:17:51.052Z] SessionReqHand - _SuccessHandler - status: success 
[DEBUG - 2013-05-24T15:17:51.184Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - page.onConsoleMessage - Tests complete 

Тест бегун затем вешает и никогда не получает результаты испытаний, однако, так как proxyUrl не указал на прокси-сервер, который работает стажер.

EDIT 5/28

Стоит отметить, что многое из этого можно обойти серверные модификации (хотя в идеале тест стек должен быть настраиваемым, чтобы соответствовать кодовой базе, а не принуждать базы коды чтобы соответствовать), но давайте просто скажем, что в этом случае это не вариант.

В идеале, я хотел бы, чтобы Intern настраивался для загрузки client.html с указанным URL-адресом, а затем передал POST-сообщение репортера в прокси-сервер localhost:9000 через некоторые средства, совместимые с кросс-началом, например JSONP. Я не могу найти какую-либо другую разумную альтернативу, поэтому похоже, что на данный момент Intern просто не поддерживает полностью единичные тесты, которые общаются с задней стороной через AJAX.

ответ

2

Когда вы меняете URL-адрес прокси-сервера Intern, чтобы указать на другой сервер, он должен быть сервером, который фактически проксимируется обратно на сервер Intern, который работает на localhost:9000. Это не просто простой веб-сервер с символической ссылкой на каталог Intern.

Выполнение этого действия аналогично любому другому проксированию на другой сервер (CouchDB, Apache, Node.js, что угодно). Для nginx это означает использование HttpProxyModule до proxy_pass http://localhost:9000/;. Для Apache, mod_proxy и ProxyPass/http://localhost:9000/. Имейте в виду, что если вы не разрешаете серверу Intern обслуживать ваш JavaScript (т. Е. Вы только прокси до __intern), вы не получите данные о покрытии кода, поэтому лучше всего проксировать все, кроме URL-адресов служб, которые вы пытаетесь проверить.

Более подробную информацию о проксинге на Intern для тестирования веб-сервисов можно найти на странице wiki Using Intern to unit test Ajax calls.

+0

Спасибо!Я не думал использовать обратный прокси-сервер раньше, чем просто потому, что у нас уже есть один для нашего конца, и я думал, что это будет мешать, но, глядя в него, это не должно быть проблемой. – coreyschram