現在、「アカウント作成後に、アカウントが作成され、アカウント編集画面にリダイレクトされる」
というシナリオでfeature specを書いているのですが、click_buttonを押してもリダイレクトされていないようで、想定している結果になりません。
▪️問題のコード
click_button後に、リダイレクトされた先の「会員登録が完了しました」が表示される想定だが、リダイレクトされない
rspec
1RSpec.feature "Users", type: :feature do 2 # ユーザーが会員登録をする 3 it "user creates a new account" do 4 visit root_path 5 click_link "会員登録" 6 fill_in "名前", with: "test" 7 fill_in "メールアドレス", with: "test@example.com" 8 fill_in "パスワード", with: "testpassword" 9 fill_in "パスワード", with: "testpassword" 10 click_button "登録する" 11 # リダイレクト先で「会員登録が完了しました」というメッセージが表示されることを確認する。 12 expect(page).to have_content("会員登録が完了しました") 13 end 14end
controller
1def create 2 @user = User.new(user_params) 3 if @user.save 4 log_in(@user) 5 flash[:success] = "会員登録が完了しました。「通貨」と「月の開始日」を設定してください。" 6 redirect_to main_path 7 else 8 render :new 9 end 10end
▪️上記と似ているコード
上記と似ているシナリオで、「ユーザーがログインして、メインページにリダイレクトされる」というシナリオ(下記)も書いているのですが、こちらは上手くいきます。
rspec
1RSpec.feature "Logins", type: :feature do 2 let(:user) { FactoryBot.create(:user) } 3 4 # 正しいデータでログインする 5 context "with valid date" do 6 it "user logs in" do 7 visit root_path 8 click_link "ログイン" 9 fill_in "メールアドレス", with: user.email 10 fill_in "パスワード", with: user.password 11 click_button "ログインする" 12 expect(page).to have_content("ログインしました") 13 end 14 end 15end
controller
1 def create 2 user = User.find_by(email: session_params[:email]) 3 if user&.authenticate(session_params[:password]) 4 log_in(user) 5 flash[:success] = "ログインしました" 6 redirect_to main_path 7 else 8 flash[:danger] = "メールアドレス、もしくはパスワードが正しくありません。" 9 render :new 10 end 11 end
▪️確認したこと
・「save_and_open_page」を差し込んで、GUI画面を確認
・テスト用DBが作成されているか確認
・sleepメソッドを挿入して、画面遷移のタイミングを遅らせる
正直、上記2つのシナリオで違いがあるとすれば、「DBアクセスをするかしないか」くらいだと思うのですが、それ以外は同じです。
ずっと調べているのですが、全く検討つかず、お分かりになる方はいらっしゃいますでしょうか。。。
よろしくお願いいたします。
あなたの回答
tips
プレビュー