【问题标题】:RSpec test that a class method calls an instance methodRSpec 测试类方法调用实例方法
【发布时间】:2013-01-22 20:35:46
【问题描述】:

我希望测试一个类方法是否调用了一个特定的实例方法。有没有办法做到这一点?这是我所拥有的最好的,但它失败了。

describe '#foo' do
  let(:job) { create :job }
  it 'calls job.bar' do
    job.should_receive(:bar)
    Job.foo
  end
end

我需要确保调用了正确的作业实例,而不仅仅是任何实例。感谢您的帮助。

【问题讨论】:

  • 所以这个测试是在同一个实例上测试实例方法#foo调用实例方法#bar。您根本没有测试类方法。哪个应该是类上的方法?
  • 很抱歉。错字。修好了。
  • 太棒了,那么.foo 是如何让实例调用的呢?它是在做一个活动记录.find 还是类似的东西?
  • 是的。 (填写最短评论长度的空格。)

标签: ruby-on-rails testing rspec


【解决方案1】:

您可以在.foo 获取实例的方法上使用存根。

例如:

describe '.foo' do
  let(:job) { create :job }
  it 'calls job.bar' do
    Job.stub(:find).and_return job
    job.should_receive(:bar)
    Job.foo
  end
end

这样做是为了确保您希望调用方法的实例是 .foo 实际使用的实例。

您可以为此添加期望或参数匹配器,因此:

Job.should_receive(:find).with(job.id).and_return(job)

【讨论】:

  • 太棒了。非常感谢。还在学习使用 RSpec。还没有这样的东西,但这很好用。
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多