【RSpec】システムスペック:間違えていたこと【rails】
今回はRSpecの書き方でわかってなかったことをまとめます。
ユーザー新規作成のときに変数を定義していた
開発時のコントローラでは、お決まりのように変数を定義していたので、なんとなく定義して、expect(user).to be_validとしていた。
これだとuserオブジェクトを要件通りに作ったときのバリデーションチェックになってしまう。
新規作成の成功は、①新規作成ページにアクセス②必要項目を入力③登録ボタンのクリック④フラッシュメッセージの表示⑤ページ遷移ができていることが検証できればいいので、オブジェクトを作る必要はなかった。
作成したタスクの表示の検証はオブジェクトの作成要
「作ったものが表示されているか」を見たいので、ここではオブジェクトを作らないといけない。
作成そのものを検証するならfill_inを使って見ていくけど、すでに作られたものの表示を検証しているところがミソ。
フラッシュメッセージの検証
expect(flash[:notice]).to eq 'message'のようにバリデーションメッセージの時のようにやっていた。
これをするにはshoulda-matchersというgemが必要っぽいのはわかっていたが、何か違う気がしていた。
やはり、そんなことしなくてよくて、expect(page)でページの表示を検証してhave_content 'message'を使えばよかった( ^ω^ )
click_buttonとclick_link
見た目がボタンでもHTMLがa要素になっていたらリンク。どっちか確認するのが面倒くさい場合はclick_onが使える。
click_on 'Create Task'
fill_inとselect
手入力ではなく、セレクトボックスから洗濯する場合は、fill_inじゃなくてselectを使う
select 'done', from: status
.toと.not_to
「〜でない」のときは.not_to
expect(page).not_to have_content 'Hello World'
user.passwordではpasswordを取得できない
これは必ず文字列にしないといけない。