2012-12-28 1 views
7

Ich habe eine noch ziemlich einfache Rails-Anwendung, die ich mit BDD mit Gurke und TDD mit RSpec entwickeln möchte . Derzeit hänge ich an einem Test, bei dem ich überprüfen möchte, ob eine neue Instanz eines Organizers (das ist das Modell, das ich habe) aufgrund eines Validierungsfehlers nicht erstellt werden kann. Ich möchte überprüfen, dass der Fehler Array des zu erstellenden Objekts nicht leer ist, damit ich sicher sein kann, dass Fehlermeldungen zur Verfügung stehen, um sie in der Ansicht anzuzeigen.Rails RSpec: Controller Testen, prüfen, ob Fehler Array des Modells mit Einträgen gefüllt ist, wenn neuer Datensatz wegen Validierungsfehler nicht erstellt werden kann

require 'spec_helper'

beschreiben OrganizersController do render_views

describe "POST 'create'" do 

    describe "with invalid arguments" do 
    before(:each) do 
     request.env["HTTP_REFERER"] = organizers_new_path 
     @organizer_args = { :name => "" } 
    end  

    it "should return a non-empty list of errors" do 
     post 'create', :organizer => @organizer_args 
     @organizer.errors.empty?.should_not be_true 
    end 
    end 
end  

Ende

I on Rails 3.2.9 mit RSpec 2 und Gurken-Schienen basierend entwickle.

Alle Vorschläge sind willkommen. Vielen Dank!

Antwort

14

Sie sollten Abtretungs Methode verwenden, um Instanzvariable von Controller-Aktion zu erhalten:

assigns(:organizer).errors.empty?.should_not be_true 
11

Die neueste bevorzugte Syntax ist:

expect(assigns(:organizer).errors.empty?).to_not be_true 
+0

'sei wahr' (kein Leerzeichen) – Tobi

1

Dank für die Antwort Jungs, aber ich möchte ein vorschlagen leicht schönere Syntax: expect(assigns(:organizer).errors).to_not be_empty

(ohne Bezug auf die Frage)

Grundsätzlich, wenn Sie eine Methode haben, die mit ? endet, haben Sie den entsprechenden rspec-Matcher, der mit be_ beginnt, z. 1.odd? #=> true expect(1).to be_odd

Verwandte Themen