ぺんぎんのRails日記

ぺんぎん。エンジニア経験ゼロ。Rails勉強中。

【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を取得できない

これは必ず文字列にしないといけない。