我有一个班级,例如:
class BackgroundJob
def run
pre_processing
processing
end
def preprocessing
end
def processing
end
end
所以我的代码将运行:BackgroundJob.new.run
。在我的rspec中,我想做一些事情"在调用processing
方法之前。我怎样才能在rspec中做到这一点。
由于
答案 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