2012-04-18 8 views
5

Ich versuche, von der Verwendung von Antwort_to zu reagieren_with in Rails-Controller. Alles läuft reibungslos, außer dass in den Controller-Spezifikationen ungültige Speicherstände getestet werden. Hier ein Beispiel:Rails reagieren mit & Rspec-Controller: Test fehlgeschlagen Update

beschreibt MyController tun ...

describe "PUT update" do 
    context "with invalid attributes" do 
     it "should re-render the edit page" do 
     style = stub_model(Style) 
     Style.stub(:find) { style } 
     Style.any_instance.stub(:save).and_return(false) 
     put :update 
     response.should render_template(:edit) 
     end 
    end 
    end 
end 

Das funktioniert ganz gut mit meiner alten respond_to Stil Update-Aktion, aber mit respond_with, bekomme ich

Failure/Error: response.should render_template("edit")

Also, kurz - wie teste ich das? ... Oder sollte ich einfach davon ausgehen, dass render_with weiß, was es tut und überhaupt nicht testet? Irgendwelche allgemeinen Vorschläge?

Prost im Voraus

PS: Die Update-Aktion:

def update 
    @style = Style.find(params[:id]) 
    flash[:notice] = "Style updated" if @style.update_attributes(params[:style]) 
    respond_with(@style) 
    end 

Antwort

5

Ich habe in diese genaue Sache suchen (wie ich dieses Thema gefunden) - bisher habe ich folgendes:

Location.any_instance.stub(:valid?).and_return(false) 
Location.any_instance.stub(:errors).and_return('anything') 

(wo Location ist mein Modell, das respond_with verwendet)

aber ich beli Vorabend muss es einen schöneren Weg geben, um es zu tun - wenn ich es finde, werde ich sicher sein, es zu veröffentlichen!

Hinweis: Ich benutze auch das Responder-Juwel, so dass eine dieser Zeilen möglicherweise nicht für Sie notwendig ist, wenn Sie es nicht verwenden!