これは、過去数日間私を怒らせてきたものです。認証されたユーザーがアセットをサイトにアップロードできるようにするアクションがあります。プロセスを手動で実行できるため、コントローラーのアクションが正しいことはわかっていますが、rspecを使用してテストしたいと思います。
この一連のテスト用request
の認証済みセッションを再利用できるように、ヘルパーを使用する必要があります。:given
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
mock_file = mock("file")
mock_file.stub!(:path).and_return(file.path)
request( resource(:assets), :method => "POST",
:params => { :file =>
{:tempfile => mock_file, :filename => File.basename(file.path)} }
)
end
仕様内でブレークポイントを設定すると、すべてうまく機能しますが、仕様を実行し、デバッガーを介してコントローラーアクションのパスにアクセスしようとすると、次のようになります。
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
私の推測ではstub!(:path)
、リクエストを介して作成しているモックオブジェクトに対しては設定されていません。
問題は、ファイルのアップロードをテストするための正しい方法を検討しているのか、そうでない場合は別の方法を検討しているのかということです。