내 Rails 3 앱에는 iPhone과 데스크톱 브라우저의 레이아웃이 다릅니다. Cucumber/Capybara를 사용하여 iPhone 레이아웃을 테스트하려고합니다. 지금까지 요청의 HTTP 헤더에서 iPhone User-Agent 문자열을 설정하려고 시도한 모든 시도가 실패했습니다.Rails 3에서 Cucumber/Capybara를 사용하면 사용자 정의 사용자 문자열을 어떻게 설정합니까?
나는 Testing custom headers and ssl with Cucumber and Capybara 자습서를 따라 왔지만 HTTP 요청에서 User-Agent 문자열을 설정하지 않는 것 같습니다.
내 iPhone을 사용하여 내 Rails 앱을 탐색하면 올바른 레이아웃을 얻을 수 있습니다. Rack-Mobile-Detect을 사용하여 Rails request.format을 다음과 같이 설정합니다.
이 아이디어를 만드는 방법에 대한 아이디어가 있으십니까? 나는 카피 바라를 버리고 Webrat로 돌아갈 준비가되었습니다.
는 여기에 지금까지이 작업은 다음과 같습니다
Feature: Detect Browser
In order to have different layouts for iPhone vs. desktop browsers
As a developer
I want to show different layouts for different browsers
Scenario: Show home page with desktop layout
Given I am using "a desktop browser"
When I go to "the home page"
Then I should see "desktop browser"
Scenario: Show home page with iPhone layout
Given I am using "mobile safari"
When I go to "the home page"
Then show me the page
Then I should see "mobile safari"
Detect_browser_steps.rb
Given /^(?:|I)am using (.+)$/ do |browser|
case browser
when "mobile safari"
agent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16"
add_headers({'User-Agent' => agent})
else
# don't set a special User-Agent header
end
end
headers_hack.rb이
# http://aflatter.de/2010/06/testing-headers-and-ssl-with-cucumber-and-capybara/
# The following solution will work only if you use the :rack_test driver.
module RackTestMixin
def self.included(mod)
mod.class_eval do
# This is where we save additional entries.
def hacked_env
@hacked_env ||= {}
end
# Alias the original method for further use.
alias_method :original_env, :env
# Override the method to merge additional headers.
# Plus this implicitly makes it public.
def env
original_env.merge(hacked_env)
end
end
end
end
Capybara::Driver::RackTest.send :include, RackTestMixin
module HeadersHackHelper
def add_headers(headers)
page.driver.hacked_env.merge!(headers)
end
end
World(HeadersHackHelper)
간단합니다. 감사! –