2012-02-20 117 views
3

我正在使用Cucumber/Capybara来测试Web应用程序。我几乎是一个完整的Ruby初学者,它对Cucumber/Capybara的开发人员的真实见证就是我能够测试我的应用程序的程度,只有我拥有的微不足道的Ruby知识。红宝石/黄瓜/水豚测试多部分文件上传

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

到目前为止,我一直在使用'visit'来交互这个应用程序。即我有步骤的定义,如:

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 

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

有人可以请指出我在正确的方向吗?

回答

0

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

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