繁体   English   中英

Ruby / Cucumber / Capybara测试多部分文件上传

[英]Ruby/Cucumber/Capybara Testing Multipart File Uploads

我正在使用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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM