2017-11-19 11 views
0

ユーザーを追加するためのユーザーインデックスページの下部にフォームがあります。Rails:post user_registration_pathがテストで機能していないように見えるのはなぜですか?

<%= form_with model: @user, url: user_registration_path do |form| %> 
    <%= form.text_field :email, id: :email, class: :email %> 
    <%= form.password_field :password, id: :password, class: :password %> 
    <%= form.password_field :password_confirmation, id: :password_confirmation, class: :password_confirmation %> 
    <%= form.submit %> 
<% end %> 

手動で試してみると、うまくいきます。コンソールには、追加のユーザーがdbに追加されているのがわかります。

しかし、私のテストは失敗します!

test "additional users can be created" do 
    post user_registration_path, params: {user: { 
    email:     "[email protected]", 
    password:    "password", 
    password_confirmation: "password" 
    }} 
    follow_redirect! 
    assert_equal @initial_user_count+1, User.count 
end 

ユーザー数は同じです。

Expected: 2 
    Actual: 1 

デバッガにドロップすると、追加のユーザーが追加されていないことがわかります。さらにUsers::RegistrationsController#createの先頭にあるbinding.pryを削除して調べると、ブラウザでフォームを使用しているときに呼び出されるのに対して、テストでは#createも呼び出されないことがわかりました。私はUsers::RegistrationsControllerの前のアクションにbinding.pryを入れました。ここでもブラウザでフォームを使用しているときにアクションが呼び出されますが、テストでは呼び出されません。よくわかりません!

どちらの場合も、全く同じパラメータでuser_registration_pathに送信していますが、テスト中に#createメソッドが呼び出されないことがあります。テストで使用している電子メールアドレスは固有のもので、フィクスチャには表示されません。また、「パスワード」は正当なパスワードです。

私はこれに長時間をかけてしまった。テストが機能しているかどうか、コードが壊れているかどうかはわかりません。私が間違っていることは明らかです。テストで投稿が機能しないのはなぜですか?

それが助け場合は、ここで私のユーザー登録ルートは以下のとおりです。

user_registration PATCH/       users/registrations#update 
        PUT /       users/registrations#update 
        DELETE/       users/registrations#destroy 
        POST /       users/registrations#create 

答えて

0

はあなたの要求の構文を変更してみてください。

post 'users/registrations', params...

参考:私はそれがあるべきと考えていdocs

からの例
関連する問題