30

ファイルを送信するコントローラーアクションをテストするには?

テストでそれを行うとcontroller.should_receive(:send_file)、何もレンダリングされないため、「Missing template」で失敗します。

4

4 に答える 4

34

ぐぐっみる と、ある時点で も呼び出されるように見えますが、テンプレートがないとエラーが発生します。render

解決策は、それをスタブ化することでもあるようです:

controller.stub!(:render)
于 2011-01-15T19:58:01.487 に答える
26

動作する別の方法は次のとおりです。

controller.should_receive(:send_file).and_return{controller.render :nothing => true}

私にとって、これは の意図された副作用がsend_file他に何もレンダリングされないようにすることであるという事実を捉えています。(とはいえ、スタブで元のオブジェクトのメソッドを呼び出すのは、確かに少し不安定に思えます。)

于 2011-12-07T10:18:34.220 に答える
0

これは、RSpec コントローラーのテストでうまく機能しました。私はそれをスタブ化しないことを好みますが、代わりにオリジナルを呼び出して、ファイルを返し、応答ヘッダーなどにアクセスすることさえできます...

expect(controller).to receive(:send_file).with(some_filepath, type: "image/jpg").and_call_original
于 2020-02-06T21:47:44.057 に答える