初めに
今までテストコードを書く際に調べながら書いていたため、時間がかかっていました。
今後効率的に記述ができるように
結合テストコードを書くときによく使う表現の一例をまとめていきたいと思います!
結合テストコードを書くときによく使う表現 一例
○○ページに移動する(実際に遷移する際に使用)
visit 〇〇_path
・パスを調べる方法
% rails routes
visitで訪れたpageの中に、Xという文字列があるかどうかを判断する
expect(page).to have_content('X')
・・ page
visitで訪れた先のページの見える分だけの情報が格納されている。
※カーソルを合わせてはじめて見ることができる文字列はpageの中に含まれない。
・・ have_content('X')
Xという文字列が「ある」ことを判断する
・・ have_no_content('X')
Xという文字列が「ない」ことを判断する
要素の中に当てはまるリンクがあるか判断する
expect('要素').to have_link 'ボタンの文字列', href: 'リンク先のパス'
a要素に対して使用する
・・ have_link
指定したリンクが「ある」ことを判断する
・・ have_no_link
指定したリンクが「ない」ことを判断する
現在いるページのパスを確認する
expect(current_path).to eq(パスの指定_path)
実際にフォームへの入力を行う
fill_in 'フォームの名前', with: '入力する文字列'
例 html.erbのラベル名が「メールアドレス」の場合
<div class="field">
<div class="field__flex">
<%= f.label :email, "メールアドレス" %> #実際に表示しているラベル名を使用する
<div class="need"> 必須 </div><br />
</div>
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
テストコードでの記述方法( フォームの名前→実際に表示しているラベル名 )
fill_in 'メールアドレス', with: @user.email
モデルのレコードの数がいくつ変動するのかを確認する
expect{ 何かしらの動作 }.to change { モデル名.count }.by(数字)
例 送信するボタンを押したら、ユーザーモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change { User.count }.by(1)
何かしらの動作とは?
・・ 例 実際にクリックできる
find('クリックしたい要素').click
例 html.erbで「新規作成ボタン」がこのような記述の場合
<input type="submit" name="commit" value="新規登録" class="form__btn" data-disable-with="新規登録">
テストコードでの記述方法
find('input[name="commit"]').click
もっと簡略化する記述
・・ click_on 'ボタンに書いてある文字'
ボタンに書いてある文字を探してクリックしてくれます。
例 モデルのカウント上下と組み合わせる場合
expect{
click_on '新規登録'
}.to change { User.count }.by(1)
a要素で表示されているリンクをクリックする
find_link('リンクの文字列', href: 'URL').click
a要素のみに使用できる
まとめ
最後までご覧くださり ありがとうございました。
今回は結合テストコードを書くときに使う表現 一例をまとめました!
まとめたことで、実際に記述する際にも効率的に記述することができました。
初学者のため、記入漏れや記述ミスがありましたら教えていただけると助かります。
新しく学んだ際は追加していきたいと思います!