我可以在should_receive上设置期望值并让它执行原始代码吗?

时间:2012-11-28 10:22:40

标签: ruby-on-rails ruby rspec

我有类似的东西:

value = nil

if some_condition
  value =my_object.do_stuff()
end

在我的测试中,我有以下内容:

MyObject.any_instance.should_receive(:do_stuff)

但是,我想测试该方法是否被调用,并让它执行原始代码。我不想这样做:

MyObject.any_instance.should_receive(:do_stuff).and_return(:some_dummy_value)

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

and_call_original方法:

MyObject.any_instance.should_receive(:do_stuff).and_call_original

请参阅https://github.com/rspec/rspec-mocks#delegating-to-the-original-implementation

答案 1 :(得分:0)

我相信,最好通过FactoryGirl创建对象,而不是测试它。您可以阅读如何制作factories等内容。 例如:

FactoryGirl.define do
  factory :my_object do
   [*here is your attributes*]
  end
end

因此,在创建工厂之后,您应该创建此方法使用的测试并写下:

my_object = FactoryGirl.create(:my_object)
my_object.should_receive(:do_stuff)

在您的代码中,当您进行测试时,您将使用“my_object”执行“do_stuff”。