やったこと
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で作成、そのテスト