2

HTTP Accept-Language ヘッダーを介してロケール切り替えを追加したい Rails アプリ (3.2.12) があります。

それを達成するために私がしたこと:

私は自分のGemfileにrack-contribを追加しました:

gem 'rack-contrib', require: 'rack/contrib'

run bundle install、ミドルウェアを my に追加しましたconfig/application.rb:

config.middleware.use Rack::Locale

リクエストenv myコントローラーを調べます:

puts request.env.keys.select{|v| v=~/rack/ }

私が実行する仕様はコントローラーの仕様であり、それが含まrender_viewsれています。

私の問題:

rack.localeリクエスト環境にキーがありません。再確認しましたが、最後の直前にrake middlwareリストされています。Rack::Localerun MyApp::Application.routes

いくつかのデバッグの後、実行時にミドルウェアが呼び出されないことがわかりました

rspec spec/controllers/authentication_controller_spec.rb

しかし:同じコードを実行するとscript/rails s thin、リクエストenvでより多くのキーが得られます。つまり:

rack.request.cookie_string
rack.locale
rack.request.query_string
rack.request.query_hash

では、質問は、RSpec が Rack ミドルウェアの採用を拒否するのはなぜですか?

4

1 に答える 1

4

コントローラーの仕様はスタックを経由せず、コントローラー自体を直接呼び出します。おそらく、これには Rspec のリクエスト タイプ テストを使用することをお勧めします。

于 2013-02-22T14:53:27.457 に答える