Ruby on rails 使用rspec,我可以模拟我正在测试的方法中的对象吗?

Ruby on rails 使用rspec,我可以模拟我正在测试的方法中的对象吗?,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我定义了以下方法: def some_method x = x + 1 y = some_other_method(x) x + y end 现在在我的rspec规范中,我可以模拟对某个方法的单元测试的某个其他方法的调用吗?您确实可以模拟rspec测试中的其他方法。如果您提到的两个方法都在一个类中,Foo,您可以执行类似的操作以确保调用some\u other\u方法: subject{ Foo.new } it "should do whatever you're test

我定义了以下方法:

def some_method

  x = x + 1
  y = some_other_method(x)


  x + y
end

现在在我的rspec规范中,我可以模拟对某个方法的单元测试的某个其他方法的调用吗?

您确实可以模拟rspec测试中的其他方法。如果您提到的两个方法都在一个类中,
Foo
,您可以执行类似的操作以确保调用
some\u other\u方法

subject{ Foo.new }
it "should do whatever you're testing" do
  subject.should_receive(:some_other_method).and_return(5)
  subject.some_method
end
如果您不需要断言调用了什么,只需断言
some\u方法的结果即可,您可以这样做:

subject{ Foo.new }
it "should do whatever you're testing" do
  subject.stub(:some_other_method).and_return(5)
  subject.some_method.should eq(6)
end
上面的例子假设您使用的是rspec2。如果您使用的是rspec1,则需要使用
存根
而不是
存根

如果您的方法是在类之外定义的,那么它们实际上是在类
对象
上定义的,因此在上面的示例中只需使用
对象
而不是
Foo


有关RSpec中mock的更多信息,请查看RSpec 2或RSpec 1。

该方法在帮助程序中,我是否必须执行Subject{…}或是否可以将其嵌入其中“.”do block?我需要存根'some_other_method'的对象返回值和具有2个属性.age和.height的对象,那么我如何才能执行该操作,_返回(5)'只返回一个值,没有带属性的对象。您不需要执行subject,这只是我通常设置测试格式的方式。如果它是一个helper测试,我认为您需要将它存根在RSpec提供给您的
helper
代理上。您可以返回它应该返回的对象的实例,也可以返回一个响应您需要的方法的test double。在将来,如果你让你的例子更像你试图解决的实际问题,你可能会在第一次得到更好的答案——包括helper模块,并表明它是在一个模型或任何东西上运行的。rspec版本问题?