2012-03-29 19 views
0

In routes.rb ich habe:Nested Controller-Aktionen Testen

resources :themes do 
    resources :messages 
end 

In messages_controller_test.rb ich habe:

setup do 
    @theme = themes(:one) 
    @message = messages(:one) 
    end 

    test "should create message" do 
    assert_difference('Message.count') do 
     post :create, message: { title: "Title", body: "Some body", theme_id: @theme.id } 
    end 

    assert_redirected_to theme_path(@theme) 
    end 

Und ich erhalte die Fehlermeldung: Couldn't find Theme without an ID

Was falsch läuft?

Antwort

3

Mit verschachtelten Ressourcen sieht die schaffen Route wie folgt aus:

/themes/:theme_id/messages 

so müssen Sie diese params übergeben:

test "should create message" do 
    assert_difference('Message.count') do 
     post :create, {theme_id: @theme.id, message: { title: "Title", body: "Some body", theme_id: @theme.id }} 
    end 

    assert_redirected_to theme_path(@theme) 
end 

Und tatsächlich in Ihrem Controller-Aktion können Sie handhaben, dass: theme_id param Um es nicht mehr in Params [: Nachricht]

+0

Awesome! Das ist für mich in Ordnung! Jetzt habe ich Probleme beim Testen der Update-Aktion. Was ich versuche: 'put: update, theme_id: @theme.id, ID: @ message.id, Nachricht: {title:" Title ", body:" Irgendein body ", theme_id: @ theme.id}'. Liege ich falsch? –

+0

sieht korrekt aus. Was ist die Fehlermeldung? – alony

+0

Konnte Nachricht mit id = 980190962 nicht finden [WHERE 'messages'.theme_id' = 980190962] –