これは過去数日間私を怒らせてしまったものです。私は、認証されたユーザーが資産をサイトにアップロードできるようにするアクションを持っています。手動でプロセスを実行することができますが、rspecを使用してテストする必要があるため、コントローラのアクションが正しいことがわかります。Merbで認証されたファイルのアップロードをテストする
request
ヘルパーを使用する必要があるため、この一連のテストでは:given
という認証セッションを再利用できます。
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
私の推測:
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
は、私はスペックを実行すると、デバッガを介してコントローラのアクションでパスにアクセスしようとすると、しかし、私はこれを取得、それはすべてがうまく動作スペックの内側にブレークポイントを設定した場合stub!(:path)
が、リクエストを通じてモックオブジェクトが作成しているものに設定されていないことです。
質問は次のとおりです。ファイルアップロードをテストするための適切な方法はありますか?それ以外の方法はありますか?