2013-09-26 10 views
6

Ich habe einen einfachen Controller-Test auf den Rails basiert 4 docs (mit Test :: Unit):Rails 4 Controller-Test "nicht definierte Methode Permit"

test "should create user" do 
    assert_difference('User.count') do 
    post :create, user: users(:sample_user) 
    end 
    assert_redirected_to user_path(assigns(:user)) 
end 

Und trotz der tatsächlichen Benutzer gerade fein erstellt wird, der Test fehlschlägt, sagen:

1) Error: UsersControllerTest#test_should_create_user: NoMethodError: undefined method permit' for "832959492":String app/controllers/users_controller.rb:23:in user_params' app/controllers/users_controller.rb:8:in create' test/controllers/users_controller_test.rb:11:in block (2 levels) in ' test/controllers/users_controller_test.rb:10:in `block in '

Aus irgendeinem Grund wird der Test nicht die neuen Rails 4 permit Methode zu erkennen. Im Moment habe ich die user_params als private Methode in der Steuerung. Aber ich habe versucht, es auf die tatsächliche create Aktion zu verschieben und erhielt den gleichen Fehler. Die Benutzererstellung ist ebenfalls 100% Standard (nichts Verrücktes - genau wie die Rails-Dokumentation).

Weiß jemand, wie ich diesen Test umschreiben oder anderweitig machen kann?

Antwort

19

Es scheint, als ob die Daten, die POST Ed auf Ihre create Route ist nur eine Zeichenfolge, anstelle eines Hash-Attributs. Was gibt users(:sample_user) zurück? Ist es nur eine ID oder vielleicht ein ActiveRecord-Objekt, das nicht korrekt serialisiert wird? Wenn es AR ist, müssen Sie vielleicht users(:sample_user).attributes als Nutzlast senden?

+2

Danke, ich benutzte eine Halterung und das war das Problem. Das Hinzufügen von .attributes war die Lösung! – Justin

Verwandte Themen