【问题标题】:How to check if no records were created among all models in RSpec/Rails?如何检查 RSpec/Rails 中的所有模型中是否没有创建记录?
【发布时间】:2015-09-28 08:33:46
【问题描述】:

我知道如何检查一个模型中是否没有创建记录。

expect{Counter.increment}.to_not change{Counter.count}.by(1)

https://www.relishapp.com/rspec/rspec-expectations/v/2-2/docs/matchers/expect-change#expecting-no-change

现在,有没有办法检查 RSpec/Rails 中的所有模型中是否没有创建记录?

【问题讨论】:

  • 您认为为什么需要进行如此广泛的测试?你想达到什么目标?
  • 我需要检查一个方法调用时是否没有副作用。

标签: ruby-on-rails ruby rspec


【解决方案1】:

这是您可以检查所有应用表中的记录数的方法:

ActiveRecord::Base.send(:subclasses).inject(0){ |result, a| result += a.all.size }

关于在测试用例中使用它 - 嗯.. 我认为没有任何理由这样做 - 考虑重构测试而不是诉诸这些骇人听闻的东西。

如果您仍想使用它进行测试.. 好吧,请使用我原来的答案:

expect(your_something).to_not change{ ActiveRecord::Base.send(:subclasses).inject(0){ |result, a| result += a.all.size } }

【讨论】:

  • 我认为你是对的。测试用例不应该那么骇人听闻。无论如何,这是一个很好的答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2014-11-06
相关资源
最近更新 更多