【问题标题】:Ruby/Cucumber/Capybara Testing Multipart File UploadsRuby/Cucumber/Capybara 测试多部分文件上传
【发布时间】:2012-02-20 11:53:56
【问题描述】:

我正在使用 Cucumber/Capybara 来测试一个 Web 应用程序。我几乎是 Ruby 的初学者,它向 Cucumber/Capybara 的开发人员证明了我仅用我所拥有的微不足道的 Ruby 知识就能够测试我的应用程序有多远。

但是,正如您可能已经猜到的那样,我已经达到了需要专家帮助的地步。我需要测试分段文件上传。问题是我正在测试的 Web 应用程序有一个 URL 命令界面,但没有关联的页面。所以我不能只加载页面,填写参数并按下按钮。我必须以编程方式格式化 POST 命令。

到目前为止,我一直在专门使用“访问”与此应用程序进行交互。即我有步骤定义,例如:

Given /^I delete an alert with alertID "([^"]*)" from the site$/ do |alertID|
visit WEB_SITE_ROOT + "/RemoteService?command=deleteAlert&siteName=#{$Site}&alertID=#{alertID}" 
end

但现在我需要做一些帖子。我发现了一些似乎可以满足我需要的代码:

Given /^I upload the "([^"]*)" file "([^"]*)" for the alert$/ do |fileType, fileName|
file = File.new(fileName, "rb")
reply = RestClient.post(
  "#{WEB_SITE_ROOT}" + "/FileUploader?command=upload&siteName=#{$Site}&alertID=#{$OriginalAlertID}",
  :pict       =>  file,
  :function   =>  "#{fileType}",
  :content_type => 'multipart/jpg',
  )
end

但这不是在同一个 cucumber/capybara 会话中运行的,因此没有被授权(前面的步骤之一是登录)。此外,黄瓜/水豚没有收到来自 Web 应用程序的回复,因此我的成功/失败测试不起作用。

有人可以指点我正确的方向吗?

【问题讨论】:

    标签: ruby file-upload cucumber capybara multipart


    【解决方案1】:

    默认情况下,capybara 使用Rack::Test 适配器,它将绕过 HTTP 服务器并直接与您的 Rack/您的应用程序交互。您在步骤中执行的 POST 请求不会通过 capybara,因此它失败了。

    要在使用 Rack::Test 时上传文件,您需要使用 Rails #fixture_file_upload 方法,默认情况下,您的黄瓜步骤中应该可以使用该方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-21
      • 2017-05-14
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多