change
マッチャー
change
マッチャーは、コードブロックが可変状態を変更することを指定するために使用されます。
変更される内容を指定するには、次のいずれかの形式を使用できます:
expect { do_something }.to change(object, :attribute)
expect { do_something }.to change { object.attribute }
from
および/または to
、または by
、by_at_most
、by_at_least
のいずれかをチェーンして変更をさらに制約することもできます。
背景
次の内容で "lib/counter.rb" という名前のファイルがあるとします:
class Counter
class << self
def increment
@count ||= 0
@count += 1
end
def count
@count ||= 0
end
end
end
変更を期待する
次の内容で "spec/example_spec.rb" という名前のファイルがあるとします:
require "counter"
RSpec.describe Counter, "#increment" do
it "should increment the count" do
expect { Counter.increment }.to change { Counter.count }.from(0).to(1)
end
# deliberate failure
it "should increment the count by 2" do
expect { Counter.increment }.to change { Counter.count }.by(2)
end
end
rspec spec/example_spec.rb
を実行すると、
出力に "1 failure" が含まれることを期待します。
出力に "expected Counter.count
to have changed by 2, but was changed by 1" が含まれることを期待します。