15

私のテストではPackage、いくつかのパラメーターで呼び出される新しいクラスを初期化しています。

このクラスの初期化では、リモート ボックスで使用できるファイルを開きますが、ローカルに一般的にあるファイルは開きません。テストでそのメソッドをスタブ化する方法を考えていました。

rspec と mocha を使用しています。私は次のようなものを試しました:

File.stubs(:open).with(:file).returns(File.open("#{package_root}/test_files/test.yml"))

Packageテストで初期化する前に、この行がありました。

このエラーが発生しました:

unexpected invocation: File.open('package/test_files/test.yml')
   satisfied expectations:
   - allowed any number of times, not yet invoked: File.open(:file)

私は rspec や mocha に詳しくないので、助けていただければ幸いです。ありがとう!

4

2 に答える 2

22

スタブの新しい構文は次のようになります。

allow(File).to receive(:open).with('file_name').and_return(file_like_object)
于 2014-11-24T19:21:15.843 に答える
11

その部分が必要かどうかわかりません.with(:file)。完全に削除してみてください。:fileまた、そのように指定することで、文字列ファイル名などではなく、誰かがそのメソッドを呼び出してシンボルを渡すことを文字通り期待していると信じてい ます。また、テスト YAML ファイルをプリロードして、それを返すことも検討してください。

let(:file_like_object) { double("file like object") }

File.stub(:open).and_return(file_like_object)
于 2013-06-06T16:56:57.383 に答える