2016-08-23 5 views
6

turbolinks-iosとRailsを使用してiOSアプリケーションを開発しています。私のiOSアプリでカスタムユーザエージェントをレールテストに設定する

、私は、カスタムユーザーエージェントiPadAppを設定し、application controller Railsの上でそれを検出する(ビューによってfoo.html+tablet.hamlのようなものですので)tabletvariantを設定するためのrequest.user_agent.try(:index, 'iPadApp')を使用しています。

私のアプリはうまくいきましたが、私は自分のアプリの機能テストを書こうとしていますが、ユーザエージェントを正しく設定することはできません。私は実際にstackoverflowですthis投稿を試しましたが、request.paramsの代わりに(page.driver.browser.header(key, value))のクエリパラメータを設定していないことがわかります。

私のコントローラのテストでは、うまく動作しているユーザーエージェントを設定するために単にrequest.user_agent = 'iPadApp'を使用します。

request.user_agent.try(:index, 'iPadApp')を使用できるようにテストリクエストを設定するにはどうすればよいですか?

ありがとうございました。

+0

カピバラではどのドライバを使用していますか? –

+0

@TomWalpole明示的なドライバは指定されていません。だから私はそれがデフォルトのドライバを使用すると思います。 –

答えて

7

ドライバを指定していないので、Capybaraはrack_testを使用する必要があります。 rack_testドライバを使用すると、あなたのアプリケーションコードでrequest.user_agentにアクセスできるようにする必要があり

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

で、visitを呼び出す前にテストコードで、ユーザーエージェントヘッダーを設定することができます。

別の解決策は、あなたの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]をクリックします。私はなぜそれが最後の日(私はちょうど私のサーバーを再起動)仕事をしなかったのか分からない。 'visit'メソッドのオプションとして' User-Agent'を属性として渡す方法はありますか?そのため、訪問ごとにヘッダーを設定する代わりに、このオプションを渡すことができます。ご協力いただきありがとうございます。 –

+0

もちろん 'options'を渡すことによって' header'を設定できる 'visit'メソッドをオーバーライドできます。 –

+0

いいえあなた自身で「訪問」を無効にしないと、訪問するための方法はありません。よりシンプルでクリーンな解決策は、前のブロックにヘッダー設定を入れるだけなので、すべてのテストの前に実行されます(または特定のメタデータでタグ付けするテスト) –

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 
関連する問題