2010-12-22 32 views
7

我在我的Rails项目中使用了Omniauth,我想在“/ login”路径后面隐藏“/ auth/facebook”。Rails:如何为重定向的路由编写规范?

其实,我写了一个路线:

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

,这实际工作,即链接到login_path会重定向到/auth/facebook。但是,如何编写一个(RSpec)规范来测试此路由(特别是重定向)呢?

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

在此先感谢!

+0

[实施例Rspec的路线(https://cbabhusal.wordpress.com/2015/12/15/rails-rspec-examples-of-routing-specs/#更多-1623) – illusionist 2015-12-15 03:33:36

回答

12

因为你没有提供有关环境的任何细节,下面的例子假定您正在使用RSpec的2.x和rspec-带导轨3.

# 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了解更多详情。

+0

这个工程!谢谢!关键是在#spec/requests/redirects中定义这个规范,就像你所提到的那样。以前,我是在ApplicationControllerSpec中执行它(导致在ApplicationController中找不到动作“/ login”的错误),或者在其中一个规范/路由规范中使用了“* .should route_to blah”(它抱怨说该路线不存在)。 – winstonyw 2010-12-24 03:47:01

0

您应该使用Rack::Test并检查URL和HTTP状态代码

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

还可以使用:

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