2011-09-19 129 views
5

我有两个模型,Foo和Bar。 Foo有一个叫做ask_bar_to_do_something的方法,它在Foo的一个实例被保存后被调用。此方法不会更改此Foo实例的状态。如何测试对象上是否调用方法 - Rails RSpec

我想使这个方法返回1,并创建一个lambda块,创建Foo对象并检查返回值。有一个更好的方法吗?

谢谢。

回答

13

为什么不嘲笑对象并期待方法调用?

class Foo < ActiveRecord::Base 
    after_create :ask_bar_to_do_something 

    def ask_bar_to_do_something 
    #blah blah blah 
    end 
end 

如果使用工厂来创建对象

Foo.any_instance.should_receive(:ask_bar_to_do_something) 
Factory(:foo) 

否则

foo = Foo.new(:attr1 => 'value1', :attr2 => 'value2') 
foo.should_receive(:ask_bar_to_do_something) 
foo.save 
+0

非常感谢,德克斯特。这正是我正在寻找的。 – AdamNYC

+0

这是'should'语法吗?任何人都可以分享'expect'语法如果可用? – ianstarz

+3

@ianstarz'expect_any_instance_of(Foo).to接收(:ask_bar_do_do_something)' – rxgx