RSpec sollte redirect_to problem
Schreibe ich eine Skillung für mein Rails-controller, das ist die Aktion, die ich Teste:
def create
@course = Course.new(params[:course])
if @course.save then
#flash[:notice] = 'Course Created'
redirect_to courses_path
else
render :action => 'new', :status => 400
end
end
- Und das ist die Skillung, die validiert:
describe "POST /courses [Good Input]" do
it "should redirect to Courses index page after creation" do
@course.stub!(:save).and_return(true)
post :create
response.should be_success
response.should redirect_to(courses_path)
end
end
Trotzdem bin ich ständig diese Fehlermeldung von RSpec:
'CoursesController POST /Kurse [Gute
Input]sollte eine Weiterleitung auf die Kurse
index-Seite nach der Erstellung'
FEHLGESCHLAGEN
erwartet redirect zu "/Kurse", bekam
keine Umleitung
Irgendwelche Ideen, warum dies geschieht?
GELÖST
als rishavrastogi angegeben, sollte be_success erwartet einen http-code auf der 2xx-Reihe, und eine Umleitung fällt in die 3xx-Reihe (eigentlich seine 302)
Die Geltendmachung muss geändert werden => Antwort.sollte be_redirect.
Obwohl in diesem Fall, ist es überflüssig zu überprüfen, ob die Antwort eine Weiterleitung und dann die überprüfung, dass die Weiterleitung zu einer bestimmten Seite, so, dass die Aussage wird nicht mehr benötigt.
InformationsquelleAutor Pablo Fernandez | 2009-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht eine RSpec-er entweder, aber ich denke "Antwort.sollte be_success" sollte es nicht, denn die Antwort ist eigentlich eine "HTTP-Umleitung" nicht "HTTP Erfolg" ... also versuchen Sie, Antwort.sollte be_success
Ändern sich auch
zu
tatsächlich, die möglicherweise nicht erforderlich, bis Sie übergeben möchten einige Werte der Instanz-Variablen, zum Beispiel "post :create ,:natürlich => {:title=> "etwas" }.. " usw..dies kann erforderlich sein, wenn arbeiten mit Validierungen
Ok. Danke. Ich bin mocking alles (wie Natürlich.neue und Natürlich.finden)... so dass ich wirklich brauchen es nicht, aber es ist ein guter Punkt trotzdem
InformationsquelleAutor Rishav Rastogi
Ich bin kein rspecer, aber afaik müssen Sie etwas tun, wie
assigns(:course).stub!...
. Instanz-Variablen in specs sind nicht das gleiche wie Instanz-Variablen im Controllerassigns
so können Sie Zugriff auf den controller lieben.InformationsquelleAutor August Lilleaas