ユーザーを追加するためのユーザーインデックスページの下部にフォームがあります。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