2016-12-28 2 views
0

Ich bin wirklich hier stecken. Ich habe ein Language Modell, das in diesem Verfahren aktualisiert wird:Rails 5 Test reproduziert nicht das tatsächliche Verhalten auf PATCH

def update 
    @language = Language.find(params[:id]) 

    if @language.update_attributes(language_params) 
     flash[:success] = 'Language information updated.' 
     redirect_to @language 
    else 
     @skill_errors = @language.errors 
     render 'edit' 
    end 
    end 

Das gewünschte Verhalten für eine erfolgreiche Aktualisierung wiedergibt, wenn ich es auf meinem lokalen Server ausführen, Objekt aktualisiert wird, Blitz erscheint und Umleitung zu @language passiert.

Im Test bekomme ich jedoch nur die 200: Success Antwort, und das Objekt wird nicht aktualisiert. Hier ist der Testcode:

test 'should allow update when logged in as admin user' do 
    sign_in(@admin) 
    patch language_path(@ruby_language), params: { language: { name: 'Test'} } 
    assert_not flash.empty? 
    assert_redirected_to @ruby_language 
    @ruby_language.reload 
    assert_equal 'Test', @ruby_language.name 
    end 

@admin und @ruby_language sind in Vorrichtungen definiert. Alle Behauptungen in diesem Test versagen, einschließlich des letzten, mit reload. Meine Vermutung ist, dass es durch meine Verwendung von Devise und/oder Kaminari Edelsteinen einige Routing-Störungen geben könnte? Auf der anderen Seite sind meine Language Routen sehr einfach: resources :languages, concerns: :paginatable (das Anliegen ist hier für menschenlesbare URL-Formatierung). Bitte beachten Sie, dass alles wie gewünscht funktioniert, nur Tests scheitern aus irgendeinem Grund ... Vielen Dank im Voraus!

+0

Fügen Sie 'puts @ response.body' hinzu, nachdem Sie die' patch'-Methode aufgerufen und die Ausgabe hier veröffentlicht haben. –

Antwort

1

Es stellte sich heraus, dass mir einfach ein erforderlicher Parameter in meinem Update-Hash fehlte. Benutzte Arun Kumars Tipp des Hinzufügens puts @response.body nach patch.

Verwandte Themen