Rails:如何为执行重定向的路由编写规范?

时间:2010-12-22 23:56:02

标签: ruby-on-rails ruby routing rspec omniauth

我在我的Rails项目中使用Omniauth,我想在“/ login”路径后面隐藏“/ auth / facebook”。

事实上,我写了一条路线:

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

这实际上有效,即指向login_path的链接会重定向到/auth/facebook

但是,如何编写(RSpec)规范来测试此路由(特别是重定向)?

请注意/login不是应用程序中定义的实际操作或方法。

提前致谢!

3 个答案:

答案 0 :(得分:12)

由于您未提供有关环境的任何详细信息,因此以下示例假定您使用的是带有Rails 3的rspec 2.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的“请求规范”部分以获取更多详细信息。

答案 1 :(得分:1)

您也可以使用:

get "/login"
response.should redirect_to(path)

答案 2 :(得分:0)

您应该使用Rack::Test并检查网址和http状态代码

get "/login"
last_response.status.should == 302
last_response.headers["Location"].should == "/auth/facebook"