0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RSpecでよく使うmatcherの種類

Last updated at Posted at 2021-07-26

#matcherとは
期待値と実際の値を比較して一致した又は一致しなかった結果を返すオブジェクト

expect(100 + 200).to eq 300

expect([100, 200, 300]).to include 200

⚫︎eqとincludematcher
eqは300と同じか、includeは200が含まれているか

⚫︎to ~であること、not_to ~でないこと、toはmatcherではない

よく使うmatcher

eq
期待値と実際の値が等しいかどうかを検証する時に使う

  expect(100 + 200).to eq 300

be
値の大小を検証する時に使う

expect(100 + 200).to be >= 300

上のコードは100+200が同じであることを検証

be_xxx (predicateマッチャ)
empty? のように戻り値が true / false になるメソッドを be_empty のような形式で検証できる

expect([]).to be_empty

#下のコードと同じ意味になる
expect([].empty?).to be true
# または
expect([].empty?).to eq true

Railsのmodelにバリデーションエラーが発生していないことを検証する場合には、次のように書ける。

user = User.new(name: 'Taro',account: "taro", email: 'taro@example.com')
expect(user).to be_valid # user.valid? が true になればパスする

be_truthy と be_falsey
Railsのmodelで save メソッドを呼ぶと、保存に成功した場合は true 、失敗した場合は false が返ってくる

class User < ActiveRecord::Base
  validates :name, :email, presence: true
end
class User < ActiveRecord::Base
  
#必要事項が入力されていないので入力できない(false)
user = User.new
expect(user.save).to be_falsey

# 必須項目が入力されているので保存できる(true)
user.name = 'Taro'
user.account = 'taro'
user.email = 'taro@example.com'
expect(user.save).to be_truthy

「trueっぽい値」または「falseっぽい値」かどうかを検証してくれるのが
be_truthy と be_falsey です。
be_true と be_false 又は eq true と eq falseを使う
true もしくはfalseであることを厳密に検証するので、それ以外の値を渡されるとテストが失敗する

change + from / to /by

# popメソッドを呼ぶと配列の要素が減少することをテストする
x = [100, 200, 300]
expect(x.size).to eq 300
x.pop
expect(x.size).to eq 200

change マッチャを使うと次のように書き換える

  x = [100, 200, 300]
expect{ x.pop }.to change{ x.size }.from(300).to(200)

expect{ X }.to change{ Y }.from(A).to(B) = 「X すると Y が A から B に変わることを期待する」byを使うと1個減ることを検証できる。

x = [1, 2, 3]
expect{ x.pop }.to change{ x.size }.by(-1)

減る場合だけでなく増える場合も検証できる

x = [1, 2, 3]
expect{ x.push(10) }.to change{ x.size }.by(1)

まだたくさんありますがよく使うものだけです。

有益な記事

この記事でCherry本の著者の伊藤さんが仕事でよく使うマッチャーを言及しています。
よかったら読んでください。
自分も不要なマッチャーを使ってしまい、無駄な作業になってしまったことがあったので
おすすめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?