2016-08-23 15 views
6

Tôi đang phát triển ứng dụng iOS bằng cách sử dụng biến thể turbolinks-ios và Rails.Đặt đại lý người dùng tùy chỉnh trên thử nghiệm đường ray

Trong ứng dụng iOS của tôi, tôi đặt đại lý người dùng tùy chỉnh iPadApp và phát hiện rằng on Rails application controller đang sử dụng request.user_agent.try(:index, 'iPadApp') cho việc thiết variant-tablet (bởi vì quan điểm giống như foo.html+tablet.haml).

Ứng dụng của tôi hoạt động tốt và bây giờ tôi đang cố gắng viết các tính năng thử nghiệm cho ứng dụng của mình nhưng không thể đặt đúng tác nhân người dùng. Tôi đã thử this bài đăng thực sự là stackoverflow nhưng tôi thấy rằng nó không đặt request.user_agent thay vào đó (page.driver.browser.header(key, value)) đặt tham số truy vấn bằng số request.params.

Trong kiểm tra bộ điều khiển, tôi chỉ cần sử dụng request.user_agent = 'iPadApp' để đặt tác nhân người dùng đang hoạt động tốt.

Tôi làm cách nào để định cấu hình yêu cầu thử nghiệm để tôi có thể sử dụng request.user_agent.try(:index, 'iPadApp')?

Cảm ơn bạn vì bất kỳ sự trợ giúp nào.

+0

Bạn đang sử dụng trình điều khiển nào với capybara? –

+0

@TomWalpole Không có trình điều khiển rõ ràng nhất định. Vì vậy, tôi nghĩ rằng nó sử dụng trình điều khiển mặc định. –

Trả lời

7

Vì bạn không chỉ định trình điều khiển nên Capybara đang sử dụng rack_test. Với sự điều khiển rack_test bạn có thể thiết lập các tiêu đề tác nhân người dùng, trong mã thử nghiệm của bạn trước khi gọi visit, với

page.driver.header('User-Agent', 'the user agent string you want') 

sau đó Điều đó sẽ làm cho request.user_agent thể truy cập vào mã ứng dụng của bạn.

Một giải pháp khác nhau sẽ được đăng ký một tài xế cụ thể đối với các bài kiểm tra ipad của bạn

Capybara.register_driver(:ipad_rack_test) do |app| 
    Capybara::RackTest::Driver.new(app, :headers => { 'HTTP_USER_AGENT' => 'User agent string' }) 
end 

và sau đó xác định lái xe của bạn như: ipad_rack_test

+0

Công việc giải pháp của bạn mặc dù tôi thấy rằng 'page.driver.header' gọi' page.driver.browser.header' (mã nguồn) [https://github.com/jnicklas/capybara/blob/master/lib/capybara/ rack_test/driver.rb]. Tôi không biết tại sao ngày cuối cùng nó không làm việc (tôi chỉ cần khởi động lại máy chủ của tôi). Có cách nào để vượt qua 'User-Agent' như là thuộc tính như là tùy chọn của phương thức' visit'? Vì vậy, thay vì đặt tiêu đề trước mỗi lượt truy cập, người dùng có thể chuyển tùy chọn này. Cảm ơn bạn đã giúp đỡ. –

+0

Tất nhiên tôi có thể ghi đè phương thức 'truy cập' nơi tôi có thể đặt' tiêu đề' tùy thuộc vào việc truyền 'các tùy chọn'. –

+0

Không có cách nào để vượt qua nó để truy cập mà không có bạn ghi đè 'truy cập' chính mình. Một giải pháp đơn giản/sạch hơn có thể chỉ là đặt thiết lập tiêu đề trong khối trước, vì vậy nó chạy trước mỗi thử nghiệm (hoặc kiểm tra bạn gắn thẻ với siêu dữ liệu cụ thể) –

0

Vì tôi không thể bình luận hoặc chỉnh sửa, tôi đã buộc phải đưa ra một mới câu trả lời. Mặc dù ở trên là chính xác, ở trên cùng, nơi ông có page.driver.header('User-Agent', 'the user agent string you want'), tôi đã phải sử dụng Capybara.page.driver.header('User-Agent', 'the user-agent string you want').

Hy vọng điều này sẽ hữu ích.

0

Để thêm vào điều này, nếu bạn đang tìm cách đặt tác nhân người dùng cho tất cả thử nghiệm của mình. Bạn có thể làm điều gì đó như thế này trong phần cấu hình spec_helper.rb của bạn (tác nhân người dùng chrome làm ví dụ)

config.before(:each) do 
    Capybara.page.driver.header('user-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36.') 
end 
Các vấn đề liên quan