RSpec change matcherメカニズム
RSpecでexpect { }.change matcherを使うとブロックの実行結果による変化を検証できる .change { }ではブロック内の実行結果のbefore / afterを比較したりできる
内部的には
RSpec::Matchers::BuiltIn::Changeインスタンスが差分を持っている
たとえば.change {}.by(expected_delta)を使う時、actual_deltaは@actual_after - @actual_beforeで計算される
- メソッドの演算結果でexpected_deltaを表現できないときは by を使わないほうが良い
たとえばbyにArrayを渡すと、要素の集合演算でdiffを計算するので意図しない結果になる
expected_deltaにはあるのにactual_deltaには存在しない(-で消えた)要素があるなど