ずみーBlog

元クラゲ研究者(見習い)の92年生まれがエンジニアを目指しながら日々寄り道するブログです。

RSpecの基本的なマッチャまとめ

マッチャとは

こちらの記事によれば、

 期待値と実際の値を比較して、一致した(もしくは一致しなかった)という結果を返すオブジェクト

だそうです。   RSpecのテストコードで使います。

例えばこんな場合

  • あるページに飛んで、飛んだ先にあるはずの文言やリンクがきちんと表示されているかを確認したい
  • ログインしているユーザとは別のユーザによる投稿の表示されないはずの編集ボタンが表示されていないことを確認したい

「〜なはず」を表すのがすなわちマッチャです。
期待することの種類によって様々なマッチャを使い分けます。

具体例

テストデータが有効かどうか

  • be_valide
expect(@user).to be_valid

リンクのあるなしを判定

#リンクがあるとき
expect("要素").to have_link 'ボタンの文字列', href: "リンク先のパス"

#リンクがないとき
expect("要素").to have_no_link 'ボタンの文字列', href: "リンク先のパス"

ページに文字列が含まれるかどうか

  • have_content
  • have_no_content
expect(page).to have_content('更新が完了しました。')

特定の画像があるかどうか

  • have_selector
  • have_no_selector
expect(page).to have_selector ".content_post[style='background-image: url(画像URL);']"

データが1件増えたか(減ったか)どうか

expect{
  all(".more")[1].hover.find_link('削除', href: tweet_path(@tweet1)).click
}.to change { Tweet.count }.by(-1)

今までに学習したのはこんなところです。

また新しいのを覚えたら追記します。それでは。