1

我目前正在构建一个使用jquery-upload插件的rails应用程序,允许用户上传文件以执行诸如设置他们的用户头像等事情。如果上传成功,则会在带有上传ID的表单上设置一个隐藏字段,并在提交表单时保存该关联。当我手动测试它时,它会按照它应有的方式工作。但是,我无法让我的RSpec测试通过。在Capybara上测试JQuery上传:文件没有附上

我使用RSpec作为我的测试框架和Capybara-webkit作为我的JavaScript驱动器。该文件是应该重视的领域是这样

= file_field_tag :file, class: "upload_file_field" (此外,使用超薄的模板)

处理该文件上传看起来像这样

$element.fileupload 
    dropZone: $dropzoneElement 
    url: "/uploads.json" 
    method: "PATCH" 
    fail: (e, data) => 
    @showErrorOnFailure(e, data) 
    done: (e, data) => 
    @onSuccessfulUpload(e, data) 

控制器代码CoffeeScript的那处理文件上传看起来像这样

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代码我用在t 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没有提出任何错误。

回答