Rspecはshouldでもexpectでも書けるけど、どっち使えば?
Rspecにおいてpage変数を使うと、指定したpageがあらかじめ意図した要素をちゃんと持っているか、テストを行う事ができます。
例えばサインインするためのページに、ちゃんとサインインへのリンクが貼ってあるかどうかのテストをする時
sample.rb
describe "Signin page" do
before { visit signin_path }
it "should have right content" do
expect(page).to have_content('Sign in')
expect(page).to have_title('Sign in')
end
end
しかし上記の方法だとテストする要素が多くなるにつれて、page,page,page,page...と修行僧のように連呼することになるので以下のようにするとすごくすっきりする。
どんどんDRYにするのだ・・・(良い言葉だ
sample.rb
describe "Signin page" do
before { visit signin_path }
subject { page }
it { should have_content('Sign in') }
it { should have_title('Sign in') }
end
使える文法のバリエーションは結構多いので、letやsubject、beforeなどでどんどん冗長さを取り除いてDRYにすると、メンテナンス性も高まりますね。
do~endがひとつ減るだけでもうれしい!!!!
itとspecifyの使い分け
部分的にexpectを使ったりして、itで自然言語的におかしくなる所は要所要所でspecifyとかに変えるとなお良さそう。(わかってる感を出してみんなでドヤ顔しよう!!!!)
sample.rb
describe "when submitting a GET request" do
before { get root_path }
specify { expect(response.body).to match('Home')}
end
注)itでもspecifyでもどちらでも通ります
注)specify...明示する、明記するなどの意味
この場合はそのまま主語としてitを使うと、不自然になります。
結局人間がいつか読む事になるので、こういうクセをどんどんつけていこう(ง ˆᴗˆ)ว