7

RailsプロジェクトでOmniauthを使用していますが、「/ auth/facebook」を「/login」ルートの背後に隠したいと思います。

実際、私はルートを書きました:

match "/login", :to => redirect("/auth/facebook"), :as => :login

これは実際に機能します。つまり、へのリンクlogin_pathはにリダイレクトされ/auth/facebookます。

ただし、このルート(具体的にはリダイレクト)をテストするための(RSpec)仕様を作成するにはどうすればよいですか?

/loginこれは、アプリケーションで定義されている実際のアクションでもメソッドでもないことに注意してください。

前もって感謝します!

4

3 に答える 3

12

環境に関する詳細を提供しなかったため、次の例では、Rails3でrspec2.xとrspec-railsを使用していることを前提としています。

# rspec/requests/redirects_spec.rb
describe "Redirects" do
  describe "GET login" do
    before(:each) do
      get "/login"
    end

    it "redirects to /auth/facebook" do
      response.code.should == "302"
      response.location.should == "/auth/facebook"
    end
  end
end

詳細については、 rspec-railsの「RequestSpecs」セクションをお読みください。

于 2010-12-23T16:51:50.743 に答える
1

次のものも使用できます。

get "/login"
response.should redirect_to(path)
于 2012-06-07T12:55:42.273 に答える
0

Rack :: Testを使用して、URLとhttpステータスコードを確認する必要があります

get "/login"
last_response.status.should == 302
last_response.headers["Location"].should == "/auth/facebook"
于 2010-12-23T01:33:12.387 に答える