Merbので認証されたファイルのアップロードをテスト
-
12-09-2019 - |
質問
これは、過去数日間、私は怒っ駆動されたものです。私は、認証済みユーザーがサイトにアセットをアップロードすることを可能にする作用を有します。私は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)
が要求を通してそれを作っているモックどんなオブジェクトに設定されていないということです。
質問です:私は、テストファイルアップロードのための、別の方法は何かないかの正しい方法についてはあるだろう。
?解決
私はそれが間違ってやっていました。 「[:0x3fda2a4736c0 @name = \スペック::モック::モック#」ファイル\「]」私のモックオブジェクトとして渡されたのでrequest
を使用することにより、すべてのパラメータによってはto_sを呼んでいました。これは、例外出力にもっと注意を払うように私に教えてくれます。
その代わり、私はmultipart_post
を使用して、ブロック内の認証呼び出しをスタブアウトする必要があります。
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
multipart_post( resource(:assets), :method => "POST",
:params => { :file => file } ) do |controller|
controller.stub!(:ensure_authenticated).and_return(true)
controller.session.stub!(:user).and_return(User.first)
)
end
所属していません StackOverflow