RSpec の have_attributes マッチャ

RSpechave_attributes マッチャは『オブジェクトの属性(プロパティ)を検証する』マッチャになります。 例えば、

it { expect(10.to_s).to eq("10") }
it { expect(10.positive?).to eq(true) }

というようなテストが

# メソッド名と戻り値の Hash を渡す
it { expect(10).to have_attributes(to_s: "10", positive?: true) }

という風に書くことが出来ます。

[subject と組み合わせる]

subjectis_expected を使用して、subject 対象のプロパティのテストを行ないたい場合、

subject { 10 }
it { expect(subject.to_s).to eq("10") }
# こういう風に書くことは出来ない
# it { is_expected.to_s.to eq("10") }

のように is_expected を使用することは出来ません。
このような場合に have_attributes マッチャを利用することが出来ます。

it { is_expected.to have_attributes(to_s: "10") }

べんり。

[参照]

https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/have-attributes-matcher