Я создаю приложение Rails 3, которое отображает различные представления для мобильных устройств (с использованием jQuery Mobile) и обычных браузеров для настольных компьютеров. Я тестирую с Cucumber / Capybara, и у меня есть отдельные тестовые наборы для мобильного телефона и браузера. Я могу установить строку «Мобильный пользователь-агент» в HTTP-заголовке запроса, просто используя «взлом заголовков», найденный здесь…
Используя Cucumber / Capybara в Rails 3, как мне установить пользовательскую строку User-Agent?
Проблема ...
Большинство моих мобильных шагов Cucumber работают нормально (например, я установил мобильный заголовок на шаге, после чего мобильные представления просматриваются). Однако после отправки формы тест затем отображает представление следующего шага в браузере (а не в мобильном представлении, которое мне нужно). Я думаю, это может быть связано с тем, что Capybara удаляет заголовок после действия отправки формы.
Я попытался проверить это, добавив регистратор к своему действию контроллера, чтобы я мог посмотреть заголовки user_agent следующим образом:
def show
# …
logger.info("Headers: #{request.user_agent}")
# …
end
Я использовал заголовок iPhone (покупателем является ресурс). В моем test.log я вижу:
Для действия создания ...
Started POST "/buyers" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#create as HTML
#...
Headers: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
#...
Redirected to http://www.example.com/buyers/1
Completed 302 Found in 7ms
Для последующего действия шоу (примечание «Заголовки:» пусто)…
Started GET "/buyers/1" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#show as HTML
#...
Headers:
#...
Completed 200 OK in 4ms (Views: 2.8ms | ActiveRecord: 1.4ms)
Как и следовало ожидать, шаг «покажи мне страницу» затем отображает страницу браузера, а не нужную мне мобильную страницу.
Как сохранить заголовок, чтобы все мои мобильные шаги выполнялись в моем наборе мобильных тестов?
Обновление
Jnicklas (создатель действительно потрясающего драгоценного камня Капибара!) Отвечает:
«Это больше вопрос, чем проблема, тбх. В Rack-Test в настоящее время нет никакого способа добиться такого короткого исправления обезьяны, о котором я знаю. Я думал о добавлении опции заголовка к драйверу для тестирования в стойке, которая позволила бы передавать различные опции заголовка. Если вы используете много JavaScript, Selenium в любом случае лучше подойдет и позволяет свободно настраивать пользовательский агент, IIRC. ”
https://github.com/jnicklas
https://github.com/jnicklas/capybara