jquery - 使用 capybara / cucumber 测试 jquery-file-upload

标签 jquery ruby-on-rails cucumber capybara jquery-file-upload

我正在尝试使用 capybara / cucumber 启用自动上传选项来测试 jquery-file-upload 插件。该问题似乎与 autoUpload 选项有关,因为在没有设置 autoUpload 选项的情况下,测试环境中的上传工作正常。我正在使用 Attach_file capybara 方法上传。该方法会触发更改事件监听器,但显然没有太多其他内容。它永远不会命中附件的创建操作,当我尝试手动触发提交事件监听器时,创建操作中的 params[:attachment] 为空,无法创建附件。

目前的设置方式是这样的:

  • 我有 3 个模型,一个项目模型、一个附件模型和一个问题模型
  • 问题索引页上有 2 个表单 - 一个表单用于提交新附件,另一个表单用于提交新问题
  • 每当触发附件创建操作时,jquery-file-upload 都会通过 javascript 填写隐藏字段,其中包含将附件添加到相关问题所需的数据 - 这是通过 jquery-file-upload 的 fileuploadcompleted 回调完成的

每当我尝试手动上传文件时,这种上传方式都有效,但在测试环境中失败。我尝试在附件表单中添加一个隐藏的提交按钮,当我通过 capybara 按下该按钮时,它会触发创建操作,但参数再次为空。我已经不知道该怎么做了,所以如果有人遇到类似的问题,如果他们能帮助我,我将不胜感激。

这里有一些相关代码(如果有帮助的话):

jquery-file-upload initalization and attachment form

使用的 gem :
Rails 3.2.12
capybara 2.1.0
capybara -webkit 1.0.0
Jquery-fileupload-rails 0.3.0 - 也使用 0.4.1 进行了测试,结果相同

如果您需要更多代码或任何其他信息,请告诉我,我可以立即编辑这篇文章。

谢谢!

最佳答案

我也遇到过类似的问题,但我发现:

  1. Capybara + Webdriver 需要特定于平台的路径分隔符(在 Windows 上它是 仅 '\',无论 Windows 支持 '/',在 *nix 上 - 仅 '/' 等),而 Capybara 对此不执行任何操作<
  2. Capybara + WebDriver 需要完整路径
  3. 您无法将文件附加到隐藏文件输入(例如,当您使用 JQuery FileUpload 插件时)。

我使用选择器查找隐藏元素并使用特定于平台的分隔符设置文件路径:

path = File.expand_path(rel_path).gsub('/', File::ALT_SEPARATOR || File::SEPARATOR)
find(:file_field, input_id, visible: false).set(path)

就我而言,它适用于下一版本的 gems:

gem "jquery-fileupload-rails", "0.4.1"

gem 'capybara', '2.2.1'
gem 'selenium-webdriver', '2.41.0'

关于jquery - 使用 capybara / cucumber 测试 jquery-file-upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360978/

相关文章:

c# - jquery 和 ASP.Net AJAX 框架

javascript - Jquery 事件委托(delegate)问题

sql - 如何让elasticsearch执行类似于SQL 'LIKE'

ruby-on-rails - Rails 4 : Check if today is sunday, 每月 15 日或最后一天

cucumber - 如何使用 Capybara 检测 500 内部服务器错误?

debugging - 如何向 .feature 文件添加断点

javascript - 神秘的 div 被附加到超链接

javascript - Onbeforeunload 在主体中单击一次鼠标之前不起作用

ruby-on-rails - 减价中仅允许YouTube/Vimeo iframe

java - @MockBean 正确注入(inject)但在测试类上具有空值