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