2017-07-01 7 views
-1

でいくつかのメソッドを呼び出す前に何かをやって、私は、例えば、クラスを持っている:はRSpecの:クラス

class BackgroundJob 
    def run 
    pre_processing 
    processing 
    end 

    def preprocessing 
    end 

    def processing 
    end 
end 

だから私のコードを実行するには、次のとおりです。BackgroundJob.new.run。私のrspecでは、processingメソッドを呼び出す前に "何か"をしたいと思っています。 rspecでこれをどうすればできるのですか?

おかげでRSpecので

答えて

0

は、どこか他の所として、これはModule#prependを使用して行うことができます。

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

このアプローチには欠点があります:修正クラスには、先頭に追加モジュールに滞在します、ノーあり既にプリペンドされたモジュールを「プリペンド」する。


もう1つの方法はFlexmock’s pass_thruです。私の知る限り、pass_thruしかので、1がすべきは、この方法にに追加のコードを追加する可能性があるflexmockpreprocessing方法:

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