2011-01-04 1 views
2

私はすべての非ローカルリクエスタにアプリケーションへのアクセスを遮断したいと考えています(実際には私のアプリケーションの実際の機能はより洗練されていますが、私の特定の問題を解決します)。 RSpecのリクエストテストでこれをテストするにはどうすればいいですか? spec/requests/gatekeeper_spec.rbRails/RSpecリクエストテストでローカル以外のリクエストをシミュレートする

describe "A local request to the site root" do 
    before :each do 
    get root_path 
    end 
    it "should not allow access" do 
    response.status.should be(401) 
    end 
end 

describe "An external (terminology?) request to the site root" do 
    before :all do 
    # TODO: make request remote 
    end 
    before :each do 
    get root_path 
    end 
    it "should allow access" do 
    response.status.should be(200) 
    end 
end 

にはどうすれば# TODOラインを実装する必要がありますか?私はモックを調べて、リギングrequest.remote_ipが適切かもしれないと思っていますが、そのようなモックがどのように実装されているか正確には分かりません。

+0

:10は、Railsの3に存在するActionController::Base.allow_rescue設定から取られ、そしてRSpecの構成が存在することになります"be" ** ** ** ... "? – Hello71

+0

@ Hello71:心配はいりません。 RSpecはファンキーです。それは正しい。これは、Rubyの世界で行われているこの読みやすさの傾向の一部です。 –

答えて

2

、テスト要求は、「0.0.0.0」のリモートアドレスを持っているので、彼らが通常と考えられますリモートで、ローカルリクエストをスタブする必要があります。

私は、これはコントローラの仕様のために働くべきだと思う - 要求スペックがわからない:

request.stub(:local?) { true } 
+0

要求オブジェクトは、 'get'によって要求が行われるまで存在しないように見えます。私はその機能を拡張することがこの難問の中で最良の方法であると考えています。 –

+2

ええと、要求仕様が異なっているようです。 'get root_path、nil、" REMOTE_ADDR "=>" 127.0.0.1 "'を試して、localhostをシミュレートすることもできます。 – zetetic

+0

スタッビングのアイデアは良いですし、私はコントローラーの仕様で効果的に使用しました。私は 'before_filter'として"アクセスチェッカー "を実装し、リダイレクトの代わりに' true'を返すだけの対応するフィルタをスタブしました。コントローラ仕様により、ローカル変数「コントローラ」を介してコントローラにアクセスすることができました。要求仕様に関しては、私はそれをうまく動かすことができませんでしたが、関数はその後変更されていますので、Rails Guidesがその詳細を記入するまで、このギャップは無視されます。 –

2

テストされていないが、はRailsの2.3.x以降と3.0で作業する必要があります私が正しく理解していれば

before :each do 
    Rails::Initializer.run do |config| 
    config.action_controller.consider_all_requests_local = false 
    end 
end 

after :each do 
    Rails::Initializer.run do |config| 
    config.action_controller.consider_all_requests_local = true 
    end 
end 
1

Railsでは4あなたがそれを行うことができます。

RSpec.configure do |config| 
    config.before(:each, allow_rescue: true) do 
    Rails.application.config.action_dispatch.stub(:show_exceptions) { true } 
    Rails.application.config.stub(:consider_all_requests_local) { false } 
    end 
end 

そして、あなたのテストでファイル:

describe "A test" do 
    it "renders custom error pages", :allow_rescue => true do 
    # ... 
    end 
end 

名前私はRuby on Railsに精通していないんだけど、「それは「[ない]のアクセスを許可する必要がありますする必要があり

RSpec.configure do |config| 
    config.before(:each, allow_rescue: true) do 
    ActionController::Base.stub(:allow_rescue) { true } 
    end 
end 
関連する問題