2013-05-23 3 views
0

Я написал свои основные модульные тесты во время тестирования в браузере (client.html), и теперь я готов настроить автоматизацию тестирования через Node, однако у меня еще нет настройки сервера Selenium , и управление, вероятно, никогда не даст одобрения стороннему сервису, например Sauce Labs, поэтому я пытаюсь запустить тест Intern через PhantomJS, используя его режим webdriver.Intern WebDriver и PhantomJS

Я бегу PhantomJS с этими параметрами:

$ phantomjs --ignore-ssl-errors=true --web-security=false --webdriver=8910 

Моя Intern конфигурация выглядит следующим образом:

define({ 
    proxyPort: 9000, 
    proxyUrl: 'http://localhost:9000/', 
    environments: [ 
    { 
     browserName: 'phantom', 
     version: '1.9.0', 
     platform: 'Linux' 
    } 
    ], 
    webdriver: { 
    host: 'localhost', 
    port: 8910 
    }, 
    maxConcurrency: 3, 
    useSauceConnect: false, 
    // ... 
}); 

Это похоже на работу по большей части, однако мой, я имею проблемы с AJAX-запросы в моих тестах. Поскольку тесты проходят через собственный сервер стажера, я добавил фильтр AJAX, чтобы убедиться, запросы направляется в нужном месте:

$.ajaxPrefilter(function (options) { 
    options.url = serverName + options.url; 
}); 

Я до сих пор нахожу, что мои запросы AJAX терпят неудачу, однако. При дальнейшей проверке я обнаружил, что запросы не отправляются (AJAX не работает с readyState из 0). Похоже, что PhantomJS не предоставляет больше информации, чем эта. Флаг --web-security=false для phantomjs должен гарантировать, что междоменные запросы возможны, поэтому я не уверен в причине.

В PhantomJS не указана конкретная ошибка, единственной информацией, предоставленной обработчику сбоя, является статус «ошибка».

EDIT: Я попытался выполнить ручной XMLHttpRequest без jQuery и успешно работает. Так ясно, что это что-то в конце jQuery. Включение crossDomain не исправить.

ответ

1

Итак, по причинам, которые я еще не совсем понял, используя method вместо type в конфигурации AJAX разрешил проблему (я случайно наткнулся на это). Я не совсем понимаю, почему, так как method это просто псевдоним для type в JQuery:

s.type = options.method || options.type || s.method || s.type; 

Несмотря на это, это действительно решить проблему для меня.

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