2011-01-16 8 views
0

Ich versuche, den Controller-Code spec:Wie Controller spec wo Modell Assoziationen auftreten

# ClustersController 
def create 
    # create new cluster 
    @cluster.user = current_user 
    # save code 
end 

Ich bin mit Rails 3/RSpec 2 und ich bin ziemlich neu in der TDD-Flow. Ich möchte im Grunde sicherstellen, dass das Benutzerattribut während der Erstellungsaktion zugewiesen wird.

Antwort

1

Zunächst einmal glaube ich nicht, dass Sie erstellen, aktualisieren Sie ein Objekt speichern. Sie können den Benutzer auf das Verfahren erstellen passieren, wie folgt aus:

Cluster.create(:user => current_user) 

Und dies zu testen, die Sie tun können:

describe ClusterController do 
    describe "POST create" do 
    it "creates a new cluster" do 
     lamda do 
     post :create 
     end.should change(Cluster, :count).by(1) 
    end 

    it "set the current user as the new cluster's user" do 
     user = mock() 
     Cluster.should_receive(:create).with(:user => user) 
     post :create 
     assign(:cluster).user.should == user 
    end 
    end 
end 

Ich denke, das tun wird.

Hoffe, dass Hilfe.

+0

Was genau meinst du mit ich sollte nicht "erstellen, aktualisieren Sie ein Objekt speichern"? I code ich included ist Teil des ClusterControllers und es ist üblich, current_user der Assoziation zuzuweisen oder current_user.clusters.build zu verwenden – raidfive

+0

Ich meine, dass Sie das in den Baumschritten tun: Cluster.new, cluster.user = current_user und schließlich cluster .save kann mit einem einzelnen Cluster.create (: user => current_user) ausgeführt werden. Es ist einfacher und vereinfacht auch die Tests. –

+0

Okay, ich sehe was du damit sagst. Aber, wie würde ich testen, dass die Aufgabe, die ich in meiner Frage erwähnt habe, stattgefunden hat (so wie ich es beschrieben habe). Ich würde das gerne für zukünftige Referenzen wissen. – raidfive