Rails: Как мне написать спецификацию для маршрута, который выполняет перенаправление? - PullRequest
7 голосов
/ 23 декабря 2010

Я использую Omniauth в своем проекте Rails, и я хотел бы скрыть "/ auth / facebook" за маршрутом "/ login".

Фактически я написал маршрут:

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

и это на самом деле работает, то есть ссылка на login_path будет перенаправлена ​​на /auth/facebook.

Однако, как я могу написать спецификацию (RSpec) для проверки этого маршрута (в частности,redirect)?

Обратите внимание, что /login не является действительным действием или методом, определенным в приложении.

Заранее спасибо!

Ответы [ 3 ]

12 голосов
/ 23 декабря 2010

Поскольку вы не предоставили никаких сведений о вашей среде, в следующем примере предполагается, что вы используете rspec 2.x и rspec-rails с Rails 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 .

1 голос
/ 07 июня 2012

Вы также можете использовать:

get "/login"
response.should redirect_to(path)
0 голосов
/ 23 декабря 2010

Вы должны использовать Rack :: Test и проверить URL и код статуса http

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