1

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はそれについてのエラーを提起していません。

答えて

0

だから、この記事を通して読んだ後、私は答えを見つけた:

Capybara webkit doesn't pass params from angular

問題は、私がアップロードを送信するためにパッチを使用していたという事実から来たように見えます。メソッドをPUTに変更した後、私のテストは合格になりました。