not_to change.by()不受支持

paw*_*318 23 rspec ruby-on-rails rspec3

我将rspec版本从2升级到3.这是我遇到的问题之一:

Failures:

  1) Slide after .destroy(force: false) visible if .with_deleted
     Failure/Error: expect{@slide.destroy(force: false)}.to_not change(Slide.with_deleted, :count).by(1)
     NotImplementedError:
       `expect { }.not_to change { }.by()` is not supported
     # ./spec/models/slide_spec.rb:36:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

rspec的更改日志中,我可以读到它从未被支持过(oink?!@#).同时,仍然有一些示例如何使用更改语法但没有not关键字.

所以问题是如何期待没有变化?

paw*_*318 52

幸运的是我希望没有变化(任何),所以我可以省略by()部分.它工作得很好!

  expect{@slide.destroy(force: false)}.to_not change(Slide.with_deleted, :count)
Run Code Online (Sandbox Code Playgroud)

  • 仅仅为了解释,问题出在`.by(n)`.我找到了这个答案,并不明白为什么会这样.如果其他人有同样的问题:原因是`to_not change`意味着根本不改变,所以`by`是错误的.其他解决方案可能是`to change.by(0)` (14认同)