bouzuya.hatenablog.com

ぼうずやのにっき

RSpec の subject! を知る

いまさらながら RSpecsubject! を知る。

let に対しての let! と同様に subject に対しての subject! があった。

subject は必ず評価されるものだと思っていたのだけどそうでもなかった。

it { expect(subject.foo).to ... } はもちろん it { is_expected ... } のような暗黙にでも subject を使うものなら良いのだけど。たとえば subject に提供した double を検査する it { expected(spy_obj).to have_received(:foo) } などがまずい。 subject を使わない場合は評価されないので spy も期待通りには動かない。

何年も使っていて知らないなんてなあ。