2016-08-23 69 views
6

我正在使用turbolinks-ios和Rails變體開發iOS應用程序。在rails測試中設置自定義用戶代理

在我的iOS應用程序,我設置自定義用戶代理iPadApp和檢測on Rails的application controller使用request.user_agent.try(:index, 'iPadApp')設置varianttablet(因爲觀點一樣foo.html+tablet.haml)。

我的應用工作正常,現在我正在嘗試爲我的應用編寫功能測試,但無法正確設置用戶代理。我嘗試this後,實際上是stackoverflow,但我看到它不會設置request.user_agent而是(page.driver.browser.header(key, value))設置查詢參數在request.params

在我的控制器測試中,我只使用request.user_agent = 'iPadApp'來設置工作正常的用戶代理。

如何配置測試請求以便我可以使用request.user_agent.try(:index, 'iPadApp')

謝謝你的任何幫助。

+0

你使用哪種驅動程序與水豚? –

+0

@TomWalpole沒有給出明確的驅動程序。所以我認爲它使用默認驅動程序。 –

回答

7

由於您沒有指定驅動程序Capybara應該使用rack_test。隨着rack_test驅動,你可以調用visit之前設定的用戶代理頭,在你的測試代碼,以

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

那麼這應該使request.user_agent在應用程序代碼訪問。

不同的解決方案是註冊一個特定的驅動程序爲您的iPad測試

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

,然後指定你的驅動程序爲:ipad_rack_test

+0

雖然我發現'page.driver.header'調用'page.driver.browser.header'(源代碼)[https://github.com/jnicklas/capybara/blob/master/lib/capybara/ rack_test/driver.rb]。我不知道爲什麼最後一天它沒有工作(我只是重新啓動我的服務器)。有沒有什麼辦法可以將'User-Agent'作爲'visit'方法的參數傳遞給屬性?因此,在每次訪問之前,而不是設置標題可以通過此選項。謝謝你的幫助。 –

+0

當然,我可以重寫'visit'方法,我可以根據傳遞的'options'設置'header'。 –

+0

沒有你沒有辦法通過它來訪問沒有你自己壓倒'訪問'。一個簡單/清潔的解決方案可能只是將標題設置放在一個before塊中,所以它在每次測試之前運行(或者使用特定的元數據標記測試) –

0

既然我無法評論或編輯,我被迫做出新回答。雖然上面的說法是正確的,但是對於頂部他有page.driver.header('User-Agent', 'the user agent string you want'),我不得不使用Capybara.page.driver.header('User-Agent', 'the user-agent string you want')

希望這會有所幫助。

0

要添加到此,如果您要爲所有測試設置用戶代理。你可以在你的spec_helper.rb配置部分(以Chrome用戶代理爲例)做這樣的事情

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 
相關問題