Frage

Wer weiß, wie man eine Umleitung rspec folgen (in einer Controller-Spezifikation)? (Z Test / Einheit hat follow_redirect!)

Ich habe "follow_redirect!", Versuchte und "follow_redirect" aber nur bekommen

undefined method `follow_redirect!' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0xb6df5294>

Zum Beispiel:
Wenn ich ein Konto der Seite erstellen, um Konten Seite umgeleitet wird und mein neues Konto sollte an der Spitze der Liste sein.

it "should create an account" do
  post :create, :name => "My New Account"
  FOLLOW_REDIRECT!
  response.code.should == "200"
  accounts = assigns[:accounts]
  accounts[0].name.should == "My New Account"
end

Aber FOLLOW_REDIRECT! Bedürfnisse etwas geändert werden, die tatsächlich funktioniert.

War es hilfreich?

Lösung

Wenn Sie die Umleitung testen möchten, dass Sie außerhalb des bewegen rspec-Schienen-Domäne.

Sie können mit webrat oder einem anderen Integrations-Test-Framework diese testen.

Der einfachste Weg, dies zu lösen, ohne zu Integrationstests zurückzugreifen ist wahrscheinlich die Methode zu verspotten, die die Umleitung verursacht.

Andere Tipps

Ich denke, das ist das Standardverhalten für rspec-Schienen Controller-Tests in dem Sinne, dass Sie eine Erwartung auf dem Antwortstatus und / oder Pfad und Test für den Erfolg einstellen.

Zum Beispiel:

it "should create an account" do
  post :create
  response.code.should == "302"
  response.should redirect_to(accounts_path)
end

Sie können auf die Umleitung Lage mit

response.headers['Location']

Sie könnten verlangen dann, dass direkt an.

Versuchen Integration / Nachfrage-Tests zu verwenden. Sie sind mit stegartigen Zugang durch Controller routen. Beispielsweise: Ich habe für Rails 2 app in Datei /spec/integration/fps_spec.rb

 require 'spec_helper'

 describe "FinPoradci" do 

   it "POST /fps.html with params" do
     fp_params={:accord_id => "FP99998", :under_acc => "OM001", :first_name => "Pavel", :last_name => "Novy"}
     fp_test=FinPoradce.new(fp_params)
     #after create follow redirection to show
     post_via_redirect "/fps", {:fp => fp_params}
     response.response_code.should == 200 # => :found ,  not 302 :created
     new_fp=assigns(:fp)
     new_fp.should_not be_empty
     new_fp.errors.should be_empty
     flash[:error].should be_empty
     flash[:notice].should_not be_empty
     response.should render_template(:show)
   end
 end

und es funktioniert. Bis Sie Header gesendet werden soll (für grundlegende http Autorisierung).

 env={'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(user,password)}
 post_via_redirect "/fps", {:fp => fp_params}, env

ist in Ordnung für erstellen, aber nach Umleitung es gibt 401 und neue Genehmigung benötigt. So habe ich es in zwei Tests aufgeteilt:. Erstellung und zeigt auf dem Ergebnis der Schöpfung

Die Spezifikation ist der Rahmen aus, wenn Sie eine Umleitung Nutzungsanforderungsspezifikation folgen wollen, um das Äquivalent von Integrationstest in Test :: Unit.

Anfrage Spezifikationen follow_redirect! Werke sowie in Test :: Unit.

Oder wenn Sie inmediately umleiten verwenden _via_redirect als Suffix für das Verb, Beispiel:

post_via_redirect :create, user: @user

Für RSpec / Capybara + Rails

response_headers['Location']

Aber es funktioniert nur, wenn es keine Verzögerung vor Umleitung. Wenn es da ist, dann ist es schwieriger, die Logik zu folgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top