jquery-uploadプラグインを使用してユーザーがファイルをアップロードして、ユーザーのアバターを設定するなどの作業を行うためのレールアプリケーションを構築中です。アップロードが成功すると、フォームにアップロードID付きの非表示フィールドが設定され、フォームが送信されると、関連付けが保存されます。私が手動でこれをテストすると、それは想定されているように動作します。しかし、私はRSpecテストをパスすることができません。CapybaraでJQuery Uploadをテストする:ファイルが添付されていない
私は、私のテストフレームワークとしてRSpecを、私のjavascriptドライブとしてCapybara-webkitを使用しています。ファイルを添付することになっているフィールドは
ファイルのアップロードがこの
$element.fileupload
dropZone: $dropzoneElement
url: "/uploads.json"
method: "PATCH"
fail: (e, data) =>
@showErrorOnFailure(e, data)
done: (e, data) =>
@onSuccessfulUpload(e, data)
コントローラー・コードのように見えるハンドルのCoffeeScript(テンプレート用スリム使用して、また)この
= file_field_tag :file, class: "upload_file_field"
のように見えるものファイルのアップロードはこのように扱います
class UploadsController < ApplicationController
def create
@upload = Upload.new(file: params[:file])
byebug
if @upload.save
respond_to do |format|
format.json { render json: {upload: @upload, url: @upload.file.url(:avatar) } }
end
else
respond_to do |format|
format.json { render json: {}, status: :unprocessable_entity }
end
end
end
end
ここで私が使っているRSpecコードは私がテストを実行するとESTは
filepath = "#{Rails.root}/spec/support/fixtures/uploads/flickr.jpg"
attach_file :file, filepath
click_on "Submit"
expect(page).to have_css(".avatar-img img")
ファイルを添付するために、全体の要求は(カピバラはそれがトラブルのファイルやフォームフィールドを見つけることがあった示すものではありません)を通過します。ただし、テストは失敗します。そして、私がbyebugを使って新しいアップロードを保存する要求を受け取った時点でアップロードコントローラを調べると、パラメータは送信されません。 params[:file]
のように、nil
と評価された場合は、flickr.jpg
のファイル情報が必要です。私のファイルがテストに添付されていない理由は、Capybaraはそれについてのエラーを提起していません。