Я создаю приложение Rails 3, которое отображает разные представления для мобильных устройств (с использованием jQuery Mobile) и обычных настольных браузеров. Я тестирую Cucumber/Capybara и имею отдельные комплекты тестов для мобильных устройств и браузера. Я могу установить мобильную строку User-Agent в HTTP-заголовке запроса просто отлично, используя найденный здесь заголовок заголовков...
Использование Cucumber/Capybara в Rails 3, как установить пользовательскую строку User-Agent?
Проблема...
Большинство моих мобильных шагов Cucumber работают нормально (например, я устанавливаю заголовок мобильного устройства на шаг, после чего визуализуются мобильные представления). Однако после отправки формы тест затем отображает представление обозревателя на следующем шаге (а не мобильное представление, которое я хочу). Я думаю, что это может быть связано с тем, что Capybara бросает заголовок после действия отправки формы.
Я попытался проверить это, добавив регистратор в мое действие контроллера, чтобы я мог посмотреть заголовки user_agent следующим образом:
def show
# …
logger.info("Headers: #{request.user_agent}")
# …
end
Я использовал заголовок iPhone (покупатель - это ресурс). В моем test.log я вижу:
Для действия create...
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
Для последующего действия show (примечание "Заголовки: пусто)...
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 (создатель поистине удивительного камня Капибары!) отвечает:
"Это больше вопрос, чем проблема. tbh. В Rack-Test в настоящее время нет способа достичь этого недостатка, который я знаю. Я думал о добавлении опции заголовка в драйвер стеллажа, который позволит передавать различные варианты заголовков. Если вы используете много JavaScript, Selenium может быть лучше в любом случае и позволяет вам свободно устанавливать пользовательский агент, IIRC."