1

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

我使用 RSpec 作为我的测试框架,使用 Capybara-webkit 作为我的 javascript 驱动器。文件应该附加的字段如下所示

= file_field_tag :file, class: "upload_file_field" (另外,使用 slim 进行模板)

处理文件上传的咖啡脚本看起来像这样

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

处理文件上传的控制器代码如下所示

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 代码

filepath = "#{Rails.root}/spec/support/fixtures/uploads/flickr.jpg"
attach_file :file, filepath

click_on "Submit"

expect(page).to have_css(".avatar-img img")

当我运行测试时,整个请求都会通过(Capybara 并未表示它在查找文件或表单字段时遇到了麻烦)。但是,测试失败。当我使用 byebug 检查上传控制器时它收到保存新上传的请求时,没有发送任何参数。正如在params[:file]评估为nil时,它应该具有 的文件信息flickr.jpg。知道为什么我的文件没有在测试中附加,即使 Capybara 没有提出任何错误。

4

1 回答 1

0

所以读完这篇文章后,我找到了答案:

Capybara webkit 不会从角度传递参数

看起来问题来自我使用 PATCH 发送上传的事实。将方法更改为 PUT 后,我的测试开始通过。

于 2017-02-24T17:30:25.503 回答