change
単に、状態が変わったことだけを検証する。
「何から何に変わったか」「どれぐらい変わったか」ということは気にしない。
x に 1 を足したら、change
が成り立つ。
x = 1
expect { x += 1 }.to change { x }
# => true
x に 2 を足しても、change
が成り立つ。
x = 1
expect { x += 2 }.to change { x }
# => true
x に 1 を足して、さらに 1 を引いた場合。
状態は変わっていないので、 change
は成り立たない。
x = 1
expect { x += 1; x -= 1; }.to change { x }
# => RSpec::Expectations::ExpectationNotMetError: result should have changed, but is still 1
change.by
値の増減を、相対値で検証する。
値が5増えた場合、 change.by(5)
が成り立つ。
x = 1
expect { x += 5 }.to change { x }.by(5)
# => true
値が5減った場合、 change.by(-5)
が成り立つ。
x = 1
expect { x -= 5 }.to change { x }.by(-5)
# => true
増減した後の「絶対値」を検証しているわけではないので注意。
たとえば 3 + 4 を計算した時、change.by(7)
は成り立たない。
x = 3
expect { x += 4 }.to change { x }.by(7)
# => RSpec::Expectations::ExpectationNotMetError: result should have been changed by 7, but was changed by 4
増えた値は 4 なので、成り立つのは change.by(4)
だ。
x = 3
expect { x += 4 }.to change { x }.by(4)
# => true
change.from.to
状態が何から何に変わったのかを検証する。
たとえば x = 3 + 4
を計算した場合、 値は3から7に変わる。
よって change.from(3).to(7)
が成り立つ。
x = 3
expect { x += 4 }.to change { x }.from(3).to(7)
# => true
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
メンター受付