Ruby on rails 铁路测试及维修;Mocha:如何存根特定的模型-有条件的任何_实例?

Ruby on rails 铁路测试及维修;Mocha:如何存根特定的模型-有条件的任何_实例?,ruby-on-rails,ruby,unit-testing,ruby-mocha,Ruby On Rails,Ruby,Unit Testing,Ruby Mocha,我只想存根一个特定的模型,而不仅仅是一个特定的对象,而不是每个实例 例如,给定的类“Person”具有“name”(字符串)和“cool”(布尔)属性。我们有两种型号: person_bill: name: bill cool: false person_steve: name: steve cool: false 现在我只想给steve留个存根,这很好用: p1 = people(:person_steve) p1.stubs(:cool? => true)

我只想存根一个特定的模型,而不仅仅是一个特定的对象,而不是每个实例

例如,给定的类“Person”具有“name”(字符串)和“cool”(布尔)属性。我们有两种型号:

person_bill:
   name: bill
   cool: false

person_steve:
   name: steve
   cool: false
现在我只想给steve留个存根,这很好用:

p1 = people(:person_steve)
p1.stubs(:cool? => true)
assert p1.cool? #works
但如果我再次从DB加载模型,它不会:

p1 = people(:person_steve)
p1.stubs(:cool? => true)
p1 = Person.find_by_name p1.name
assert p1.cool? #fails!!
这是可行的,但也会影响比尔,这不应该:

 Person.any_instance.stubs(:cool? => true)
 assert people(:person_bill).cool? #doesn't fails although it should
那我怎么能就史蒂夫·斯图克,但无论如何?有没有像这样的条件实例

 Person.any_instance { |p| p.name == 'Steve' }.stubs(:cool? => true)

提前谢谢

为什么不将生成对象的方法存根

Person.stubs( :find_by_name ).
       returns( stub(:cool? => true) )
我认为这是正确的(也是简单的)答案。我很确定没有什么比你的any_实例语法更好的了。您可能会在序列语法中发现一些有用的东西:


你能再举一个例子说明你在找什么吗?祝你好运

在这种情况下是正确的,但我的实际问题有点棘手。我需要它用于控制器测试,其中find方法在代码中更“深入”。但是,很多测试方法无论如何都是不好的,所以我改变了它,让它工作起来。但我仍然很好奇如何在任何情况下都能做到这一点……解决深层代码的方法是使其变得肤浅:-)。在TDD或良好的单元测试中,您希望避免复杂的代码和深度嵌套。如果很难测试,那么最好的方法不是对复杂的代码进行复杂的测试。最好简化/重新考虑代码并编写一个简单的测试!