
じろう
学習履歴詳細
[卒業制作]UserのSystem Spec. SignUpのテストで、メール認証をSystem Specで通す方法が分からなかったけど解決。Log作成のテスト途中まで。
やったこと
UserのSystem Spec
サインアップができる
ログインができる
ログアウトができる
ログインしてる状態でサインアップのページには飛べない
以上のSystem Spec実装
LogのSystem Spec
ログを作成し送信ボタンを押すと確認画面に遷移、途中まで実装
OAuthの設定(認証URL、URI)間違っていたので直す
わかったこと
UserのSystem Specで、Deviseを使用したメール認証をどのようにテストするのか分からず困っていた。
メールが飛ばされるが、letter_openerをテストで使用しようと思っても、テストブラウザ上で開いてくれず、click_onで認証用ページを開けない。
Devise confirmable用のテスト(フィーチャスペック)を書く(解説動画付き)
これを参考に、以下のように実装することで解決。
describe 'ユーザー登録画面' do before do visit new_user_registration_path end context 'ユーザーのデータがなくログインしていない場合' do example 'ユーザー新規登録が出来る' do fill_in 'user[name]', with: 'firstUser' fill_in 'user[email]', with: 'firstuser@test.com' fill_in 'user[password]', with: 'password' fill_in 'user[password_confirmation]', with: 'password' click_button '登録する' # 登録するボタンを押した時にuserの作成はされる # なのでUser.lastでその情報を持ってきて user = User.last # 変数にuser.confirmation_tokenを代入 token = user.confirmation_token # 本来はメール本文に貼ってある確認用のリンクにvisitし # confirmation_tokenに変数tokenをセットすることによって # メール認証をしたことにできる visit user_confirmation_path(confirmation_token: token) expect(page).to have_content 'メールアドレスが確認できました。' end end end
ポイントはuser = User.last
で新しく登録されたUserの情報が取得でき、その確認用のコードがtoken = user.confirmation_token
として取得でき、さらにvisit user_confirmation_path(confirmation_token: token)
で認証が通せること。
ログのテスト時、date_fieldに日付を渡す方法が分からなかった→Date.today
でごまかす
ネストしたフォームへデータを入力するには、以下のように書く
# やったことフォーム fill_in 'log[dones_attributes][0][title]', with: 'やったこと' fill_in 'log[dones_attributes][0][worktime]', with: 90 fill_in 'log[dones_attributes][0][comment]', with: 'やったことの詳細' # わかったことフォーム fill_in 'log[knowledges_attributes][0][title]', with: 'わかったこと' fill_in 'log[knowledges_attributes][0][comment]', with: 'わかったことの詳細' # 次やることフォーム fill_in 'log[todos_attributes][0][title]', with: '次やること' fill_in 'log[todos_attributes][0][when_to_do]', with: Date.today + 3.days
ストロングパラメータで値を許可してるときと同じ感じ。違うのはattributes
のあとの[0]
で、配列のインデックスみたいなものだと思われる。
フォームを追加したら[1]
とかで入力できると思う
次やること
追加したフォームへの入力の可否を確認
関連付いたデータをFactoryBotで作成、そのテスト
2020年05月25日(月)
3.9時間