2012-02-20 120 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方法,默認情況下,該方法應該在黃瓜步驟中可用。