Add new RSpec/ChangeByZero cop.

このエントリーをはてなブックマークに追加

Add new RSpec/ChangeByZero cop #1265
https://github.com/rubocop/rubocop-rspec/pull/1265

新しい cop をrubocop-rspecに追加した。
change(...).by(0)を使用している箇所に対して警告する cop である。

# bad
expect { run }.to change(Foo, :bar).by(0)
expect { run }.to change { Foo.bar }.by(0)
expect { run }.to change(Foo, :bar).by(0).and change(Foo, :baz).by(0)
expect { run }.to change { Foo.bar }.by(0).and change { Foo.baz }.by(0)

# good
expect { run }.not_to change(Foo, :bar)
expect { run }.not_to change { Foo.bar }
expect { run }.to not_change(Foo, :bar).and not_change(Foo, :baz)
expect { run }.to not_change { Foo.bar }.and not_change { Foo.baz }

Autocorrect も実施するが、以下のように複合的に判定しているケースは単純に置き換えが不可能なため警告のみ出すようにしている。

expect { run }
  .to change(Foo, :bar).by(0)
  .and change(Foo, :baz).by(0)