【问题标题】:How to test if a method is called on an object - Rails RSpec如何测试是否在对象上调用方法 - Rails RSpec
【发布时间】:2011-09-19 15:50:06
【问题描述】:

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

我正在考虑让这个方法返回 1,并创建一个 lambda 块来创建 Foo 对象并检查返回值。有没有更好的方法来做到这一点?

谢谢。

【问题讨论】:

    标签: ruby-on-rails testing rspec


    【解决方案1】:

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

    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
    

    【讨论】:

    • 非常感谢,德克斯特。这正是我正在寻找的。​​span>
    • 这是should 语法吗?如果可用,谁能分享expect 语法?
    • @ianstarz expect_any_instance_of(Foo).to receive(:ask_bar_do_do_something)
    猜你喜欢
    • 2023-03-12
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多