Rspec:在类中调用某个方法之前做一些事情

时间:2017-07-01 04:56:45

标签: ruby-on-rails ruby rspec

我有一个班级,例如:

class BackgroundJob
  def run
    pre_processing
    processing
  end

  def preprocessing
  end

  def processing
  end
end

所以我的代码将运行:BackgroundJob.new.run。在我的rspec中,我想做一些事情"在调用processing方法之前。我怎样才能在rspec中做到这一点。

由于

1 个答案:

答案 0 :(得分:0)

在RSpec中,与其他任何地方一样,可以使用Module#prepend

来完成
BackgroundJob.prepend(Module.new do
  def processing
    puts "do stuff"
    super
  end
end)

这种方法有一个缺点:修改后的类将保留模块前置,没有办法“取消”已经预先添加的模块。

另一种方法是使用Flexmock’s pass_thru。 AFAIK,pass_thru可能只会附加代码附加到该方法,因此应该flexmock preprocessing方法:

BackgroundJob.should_receive(:preprocessing).pass_thru do |job|
  job.tap do |job|
    puts "do_stuff"
  end
end