質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1453閲覧

Rspecのfeature specでclick_buttonが動作しない

usedclothjp

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/02/28 14:28

編集2019/02/28 16:12

現在、「アカウント作成後に、アカウントが作成され、アカウント編集画面にリダイレクトされる」
というシナリオで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アクセスをするかしないか」くらいだと思うのですが、それ以外は同じです。
ずっと調べているのですが、全く検討つかず、お分かりになる方はいらっしゃいますでしょうか。。。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問