当前位置: 首页 > 知识库问答 >
问题:

如何使用RSpec和Capybara测试JQuery文件上传

易元青
2023-03-14

我已经在我的Rails4应用程序中实现了JQuery文件上传。当我从浏览器手动测试文件上传时,文件上传工作正常,但测试失败。

下面是我上传JQuery文件的规范:需要'spec\u helper'

feature 'Evidences' do
  context "as an assessor user" do
    let!(:assessor) { User.make! :assessor }
    let!(:assessment)  { Assessment.make! }

    background { sign_in assessor }

    scenario "it uploads evidence", js: true do
      evidences_count_before_upload = assessment.evidences.count
      visit edit_assessment_path(assessment)

      path = "#{Rails.root}/spec/fixtures/files/sample1.doc"
      attach_file 'evidence_file_url', path

      expect(assessment.evidences.count).to eq(evidences_count_before_upload + 1)
    end
  end
end

我使用rspec2、水豚2和恶灵来实现这个特性规范。

共有3个答案

易波涛
2023-03-14

这是恶鬼的问题。使用另一个驱动程序(例如SeleniumWebDriver)可以解决此问题。看来文件上传事件没有用poltergeist正确触发。

说明:我有一些jQuery ajax文件上传测试和同样的问题:我的文件上传测试只不与poltergeist工作)

有一个封闭的问题,有人描述了相同的症状。但没有明确的解决办法。

东郭子默
2023-03-14

尽管您没有说明测试失败的方式/原因:这里的一个常见问题是文件字段是隐藏的,所以capybara将其视为不存在。

一个对我有效的解决方案是执行一个脚本来显示文件字段,大致如下:

script = "$('input[type=file]').show();"
page.driver.browser.execute_script(script)

您可能还需要隐藏自定义上载按钮/标签。另请参见:Capybara、Capybara webkit和自定义文件上载表单

松昱
2023-03-14

我还将JQuery文件上传与RSpec和Capybara一起使用。我使用的是capybara webkit驱动程序,但这也应该适用于selenium。

请参阅此答案中的示例方法和用法:https://stackoverflow.com/a/11203629/1084109

 类似资料:
  • 问题内容: 控制器中包含以下内容: 规格: 但这不起作用: 我看到“保存文件”对话框,但显然不是“警告”对话框。 如何单击确定并让水豚看到数据? 问题答案: 改编自CollectiveIdea和其他来源。 在OSX上工作。Firefox 34.0.5 规格: 规范助手: 共享/download_helper.rb:

  • 问题内容: 关于如何使用Capybara / Selenium / Rspec 执行javascript测试的例子很多,您可以在其中编写如下测试: 但是,使用 minitest时, 您无法传递第二个参数来指示selenium执行测试。 有没有人对如何做到这一点有任何想法? 问题答案: 嗯,我注意到文档中有几行似乎说以上内容只能在Rspec中完成 但是,如果您使用的是 RSpec或Cucumber

  • 我必须为我的一个功能列表页面编写集成测试用例,该功能索引方法具有如下代码 现在,当我试图为此编写一个测试用例时,它抛出了一个错误 现在我要做的是在下面的beforeach语句中编写登录过程,然后为features列表页面编写测试用例 您能告诉我如何获得当前用户吗? 仅供参考,我曾使用Desive gem,并与Rspec一起处理集成测试用例 这是我的规格文件,这是我的食物类别规格.rb

  • 问题内容: 我设计了一个简单的表格,允许用户将文件上传到服务器。最初,表单包含一个“浏览”按钮。如果用户要上传多个文件,则需要单击“添加更多文件”按钮,该按钮会在表单中添加另一个“浏览”按钮。提交表单后,文件上传过程将在“ upload.php”文件中处理。对于上载多个文件,它工作得很好。现在,我需要使用jQuery的’.submit()’提交表单,并将ajax [‘.ajax()’]请求发送至’

  • 问题内容: 给出类似的东西: 如何测试执行时它将针对通道上收到的每条消息运行? 问题答案: 您拥有的这段代码不是很容易测试。首先,绝对要摆脱这个全局变量。相反,在构造函数中接受redis实例。 然后在测试中,您可以制作一个完全可以控制但与您使用的api一致的虚拟redis。遵循以下原则: 这种很酷的技术称为“依赖注入”(或者像某些人所说的那样,“将参数传递给构造函数”)。