認証にDeviseのRails3gemを使用してRails3にアップグレードしたばかりのRailsアプリケーションがあります。一部のページをテストするために、CelerityバックエンドでCapybaraを使用しています。
ブラウザでアプリケーションにアクセスする場合、ユーザーが保護されたページ/コントローラにアクセスしようとすると、Deviseはログインページへのリダイレクトで応答します。
Rails 2.xバージョンのDeviseでは、これは、着信リクエストに空白のacceptヘッダーが含まれている場合でも機能していました*/*
。
Rails 3バージョンでは、acceptヘッダーが空白の場合、Deviseはプレーンテキスト文字列で応答します。
空白のacceptヘッダーが重要な理由は、CapybaraのCelerityバックエンドを使用して一部のページをテストしているためです。Celerityは空白のacceptヘッダーを送信するため、Deviseによってリダイレクトされません。この動作は、Devise forRails2.xからDeviseforRails3に変更されました。
CelerityはUnexpectedPageExceptionで失敗し、サーバーログはリクエストが*/*
acceptヘッダーとして行われたことを報告します。
まったく同じテストスイートでSelenium/Webdriverバックエンドを使用すると、問題は解決します。
これに取り組むには2つの方法があります。
- どういうわけか常にtext/htmlをacceptヘッダーとして想定し、それに応じて応答するようにDeviseに指示します。どうすればそれができますか?コントローラをオーバーライドする必要がありますか?
- 送信されたtext/htmlをacceptヘッダーとして「修正」します。これはどのように行うことができますか?
- これはHTMLUnitの問題/バグですか?
私には#2はこれを修正する「正しい」方法のように見えますが、Celerity/HTMLUnitのacceptヘッダーの欠如がバグなのか機能なのかはわかりません。考え?