如何测试是否在对象上调用方法 - Rails RSpec

Ada*_*NYC 5 testing rspec ruby-on-rails

我有两个型号,Foo和Bar.Foo有一个名为ask_bar_to_do_something的方法,它在保存Foo实例后调用.此方法不会更改此Foo实例的状态.

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

谢谢.

dex*_*ter 13

为什么不模拟对象并期望方法调用?

class Foo < ActiveRecord::Base
  after_create :ask_bar_to_do_something

  def ask_bar_to_do_something
    #blah blah blah
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您使用工厂来创建对象

Foo.any_instance.should_receive(:ask_bar_to_do_something)
Factory(:foo)
Run Code Online (Sandbox Code Playgroud)

其他

foo = Foo.new(:attr1 => 'value1', :attr2 => 'value2')
foo.should_receive(:ask_bar_to_do_something)
foo.save
Run Code Online (Sandbox Code Playgroud)

  • @ianstarz`prepect_any_instance_of(Foo).收到(:ask_bar_do_do_something) (3认同)