Тестирование QUnit и PhantomJS запросов AJAX работает только через прокси

Я пытаюсь использовать grunt-contrib-qunit для запуска уже существующего набора тестов qunit (тестирование синтаксического анализа результатов запроса ajax) в автономном режиме с Phantom в Windows 8.

Тесты завершаются нормально в следующих сценариях:

  • При доступе к удаленной странице напрямую из любого браузера без запущенного Fiddler или другого прокси-сервера
  • Когда Phantom запускает тесты из командной строки, с открытым и работающим Fiddler

Как ни странно, если у меня нет открытого fiddler, отслеживающего запросы, запросы AJAX, которые я тестирую, никогда не инициализируются. Я проверил свои настройки IE LAN по умолчанию, и прокси-сервер не включен, я также попытался установить флажок «Автоопределение настроек» и никаких изменений.

Есть предположения??

Подробности о моей настройке:

  • Узел v0.10.4
  • Последний grunt-contrib-qunit
  • Windows 8
  • QUnit разделен на 4 или 5 модулей с задачами настройки и демонтажа в некоторых модулях, асинхронными и синхронными тестами, а для автозапуска установлено значение false.

Обновление:

Если я отключу параметры в Fiddler для «Повторное использование клиентских подключений» и «Повторное использование подключений к серверам», я, похоже, получу то же поведение сбоя, что и при выключенном Fiddler. Это заставило меня поверить, что это проблема с преждевременным закрытием соединений, поэтому я попытался установить собственный заголовок проверки активности, но он все равно выдает ошибку.

Обновление 2:

Я все еще сомневаюсь в этом, потому что сама страница загружается нормально, но запросы не выполняются, но похоже, что это может быть связано с аутентификацией NTLM. Скрипач может каким-то образом облегчить рукопожатие. На странице Phantom github есть открытая проблема для NTLM.

Обновление 3:

После продолжения устранения неполадок сегодня вечером похоже, что проблема связана только с аутентификацией в запросах POST. Запросы GET работают нормально. Сейчас я работаю над обходом этого, перенаправляя все запросы через обработчик ASHX и, таким образом, удаляя компонент аутентификации. Единственное, что мне пришлось изменить, это отключить веб-безопасность на фантоме, чтобы разрешить междоменные запросы.


person GotDibbs    schedule 05.05.2013    source источник
comment
Только что заметил, что мы переопределили window.alert в нескольких тестах, но изменение этого, похоже, не помогло.   -  person GotDibbs    schedule 06.05.2013
comment
Обновление с QUnit v1.1 до v1.4 исправило часть моей проблемы без тайм-аутов при завершении (хотя по-прежнему используется только Fiddler).   -  person GotDibbs    schedule 06.05.2013
comment
Я знаю, что это не ответ, и я не говорю, что вы должны делать что-то так или иначе, но для всех моих JS-тестов, использующих ajax, я буду использовать Mockjax, чтобы подделать их (таким образом, не полагаясь на то, что мой сервер вообще работает или присутствует). Просто кое что для раздумий.   -  person Jordan Kasper    schedule 29.05.2013
comment
@jakerella Спасибо за ваши мысли. Мы думали об этом раньше, но из-за того, что мы не владеем кодом API, с которым мы взаимодействуем, мы бы предпочли, чтобы запросы действительно выполнялись на работающем сервере.   -  person GotDibbs    schedule 29.05.2013


Ответы (1)


Я собирался сказать, что вам нужно отключить безопасность, что делается путем передачи --web-security=no в phantomjs. Это решит проблемы с CORS. Однако я вижу в вашем обновлении № 2, что вы уже обнаружили это.

О проблеме аутентификации POST я написал в блоге об обходном пути здесь: http://darrendev.blogspot.jp/2013/04/phantomjs-post-auth-and-timeouts.html

Я слышал, что в самой последней версии это исправлено, поэтому обновление может быть фактическим ответом?

Кстати, будьте осторожны с авторизацией в PhantomJS, так как данные аутентификации отправляются по всем запросам. Например. если ваша тестовая страница извлекает JQuery из CDN, в CDN будут отправлены ваши заголовки аутентификации. (SlimerJS имеет некоторые новые функции для обхода этого; AFAIK PhantomJS еще нет.)

person Darren Cook    schedule 19.11.2013