Ruby / Cucumber / Capybara Тестирование загрузки нескольких файлов - PullRequest
3 голосов
/ 20 февраля 2012

Я использую Cucumber / Capybara для тестирования веб-приложения.Я почти новичок в Ruby, и это реальное свидетельство для разработчиков Cucumber / Capybara о том, как далеко я смог протестировать свое приложение, имея лишь минимальное количество знаний о Ruby, которое у меня есть.

Однако, как вы, наверное, догадались, я дошел до того, что мне нужна помощь специалиста.Мне нужно проверить загрузку нескольких файлов.Проблема в том, что тестируемое веб-приложение имеет командный интерфейс 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

Но он не выполняется в том же сеансе огурца / капибары и поэтому не авторизован (одним из предыдущих шагов был вход в систему).Кроме того, ответ из веб-приложения не принимается огурцом / капибарой, и поэтому мой тест на успех / неудачу не работает.

Может кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 01 марта 2012

По умолчанию capybara использует адаптер Rack::Test, который обходит HTTP-сервер и напрямую взаимодействует с вашей стойкой / вашим приложением. POST-запрос, который вы выполняете на своем шаге, не будет проходить через капибару, поэтому он не выполняется.

Для загрузки файлов при использовании Rack::Test вам необходимо использовать метод Rails # fixture_file_upload , который по умолчанию должен быть доступен на ваших шагах с огурцом.

...