2017-05-25 17 views
1

ユニットテストとchefspecの初心者です。私は/モック依存ライブラリからレシピ内の関数呼び出しをインターセプトしようとしています別のクラスで拡張されたオブジェクトインスタンスのchefspecでの関数呼び出しの模擬方法

  • ライブラリ

    module Helper 
        def do_something_useful 
        return "http://example.com/file.txt" 
        end 
    end 
    
  • 私は次のことを試してみました

    remote_file '/save/file/here' do 
        extend Helper 
        source do_something_useful 
    end 
    

レシピ:

  • Chefspec

    allow_any_instance_of(Chef::Resource::RemoteFile).to receive(:do_something_useful).and_return('foobar') 
    allow_any_instance_of(Chef::Resource).to receive(:do_something_useful).and_return('foobar') 
    

    私もダブルでからかっ試してみました:

    helper = double 
    Helper.stub(:new).and_return(helper) 
    allow(helper).to receive(:do_something_useful).and_return('foobar') 
    

    これはuninitialized constant Helper

答えて

1

で失敗SOOOOOこれはextendが上書きされて楽しいケースですモックメソッド。だから我々は物事を駆動するためにextendを使用することができます。

before do 
    allow_any_instance_of(Chef::Resource::RemoteFile).to receive(:extend) do |this, m| 
    Module.instance_method(:extend).bind(this).call(m) 
    allow(this).to receive(:do_something_useful).and_return('foobar') 
    end 
end 

これは800%の魔法のようなもので、あなたはおそらくそれを使用するべきではありませんが、それは私の小さなテスト環境で作業を行います。

関連する問題