今日学んだこと
結合テストで上手くいかなかったことまとめ
内容
click後にすぐ画面遷移しない
(解決法) have_contentを挟む
expect(page).to have_content("hoge")
クラスを取得したい
(解決法) ピリオドの後にクラス名を書く(CSSと同じ)
expect(page).to have_selector(".hoge")
submitボタンを取得したい
(解決法) input[name="commit"]を指定する
expect(page).to have_selector('input[name="commit"]')
プルダウンで特定の条件を選択させたい
(解決法) select xx, from: yy を使う
select 'name', from: 'user[name]'
※ selectの後は「選択させたいもの」、fromの後はname属性を指定する
「current_pathが特定の文字列を含む」という条件を指定したい
(解決法) matchを使う
expect(current_path).to match(".*hoge.*")
※ ワイルドカードを使う場合は「.*」としないと「任意の文字列」を表さないので注意(正規表現と同じ)
削除ボタンクリック後のturbo_confirmに対する動作を指定したい
(解決法) page.accept_confirm do 〜 end, page.dismiss_confirm do 〜 end を使う
(OKしたい場合)
page.accept_confirm do
find("削除").click
end
(キャンセルしたい場合)
page.dismiss_confirm do
find("削除").click
end
複数要素が存在する場合に、findで特定のもののみ指定したい
(解決法) find_allを使う
find_all("hoge")[0]
※ 上記の場合、「hoge」という文字列を含む要素のうち1番最初のものを取得する
感想
結合テストは特にエラーが多く、原因特定に苦労するものも多かった。
一度で覚えるのは無理なので、何度も書いて覚えていきたい。
余談
CRUD処理を一通り備えたオリジナルアプリの作成と、テストコードの記述までが完了しました。
ユーザー体験の向上を考え、この後はエラーメッセージの日本語化に取り掛かる予定です。
(モデル単体テストの書き直しが発生します...)