はじめに
Everyday Rails - RSpecによるRailsテスト入門でRspecを学習している中、be_〇〇
というマッチャがいくつか出てきたので理解を深めたいと思いました。
環境
ruby 3.2.1
Rails 7.0.4
rspec-rails 6.0.1
マッチャ
be_〇〇はマッチャの一つです。be_successhul
やbe_truthy
、be_empty
などがあります。
そして、そもそもマッチャとは、以下のことを言います。
「期待値と実際の値を比較して、一致した(もしくは一致しなかった)という結果を返すオブジェクト」のことです。
参考: 使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」
その中でもbe_〇〇
というマッチャを使用すると、真偽判定をするメソッドのように期待値を検証することができます。
rspec
#homeページへの遷移が成功したことを検証する場合
it "responds successfully" do
get :home
expect(response).to be_successful #response.successhul?のように振る舞う
end
モデル内に真偽判定をするメソッドがある場合
- モデル内に真偽値を返すメソッドを定義しているとき、そのモデルに対応するモデルspec内で
be_<メソッド名>
とすることで真偽を判定することができます。
例えば以下のメソッドをUserモデル内で定義していた場合
user.rb
class User < ApplicationRecord
# 成人かどうかを判定するメソッド
def adlut?
self.age >= 18
end
end
Userモデルのスペック内でマッチャとして利用できる。
spec/models/user_spec.rb
it "is an adlut user" do
user = User.new(name: "sample", age: 24)
expect(user).to be_adlut
end