1

認証に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つの方法があります。

  1. どういうわけか常にtext/htmlをacceptヘッダーとして想定し、それに応じて応答するようにDeviseに指示します。どうすればそれができますか?コントローラをオーバーライドする必要がありますか?
  2. 送信されたtext/htmlをacceptヘッダーとして「修正」します。これはどのように行うことができますか?
  3. これはHTMLUnitの問題/バグですか?

私には#2はこれを修正する「正しい」方法のように見えますが、Celerity/HTMLUnitのacceptヘッダーの欠如がバグなのか機能なのかはわかりません。考え?

4

1 に答える 1

2

HTMLUnitの問題であることが判明しました。セレリティの宝石にパッチを作成しました。これは https://github.com/jarib/celerity/pull/49にあります。

デフォルトのacceptヘッダーを「text/html」に設定しますが、それをオーバーライドするオプションのパラメーターも追加します。

于 2011-02-02T22:29:43.537 に答える