我目前正在构建一个使用 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 没有提出任何错误。