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

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

Тесты в порядке в следующих сценариях:

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

Как ни странно, если у меня нет открытого фиддлера, который отслеживает запросы, тестируемые AJAX-запросы никогда не инициализируются. Я проверил настройки IE LAN по умолчанию, и прокси-сервер не включен, я также попытался установить флажок Auto Detect Settings без изменений.

Какие-нибудь мысли??

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

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

Обновить:

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

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

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам