Как мне найти изображение, сгенерированное Dragonfly с Cucumber/Capybara?

В комментариях к решению для Как мне найти изображение на странице с Cucumber/Capybara, кто-то спросил:

Я не могу понять, как заставить это работать с URL-адресами, сгенерированными Dragonfly. Выглядят они так: /media/BAh_some_long_string_AwIw/12_11_52_810_5x5.jpg?s=7e360000, где 5x5.jpg — имя моего файла. Я пробовал что-то вроде: //img[@src="/media//#{image}?s=*"] но это не работает. Есть какие-нибудь советы? — Рамон Таяг 25 фев.

У меня похожая проблема, только хуже - в моем случае сгенерированные пути к изображениям даже не включают имя файла (jpg|png|gif), они имеют только эти очень длинные идентификаторы:

<img src="/media/BAhbB1sHOgZmSSIdNGQ4MTEyOGU3ZjViZmQwZTQ4MDAwMDAyBjoGRVRbCDoGcDoKdGh1bWJJIg0yMDB4MjAwIwY7BlQ" />

(Использование стрекозы с mongo/gridfs)

Эти пути отображаются правильно, но я не могу понять, как найти их на шаге Cucumber/Capybara: P

Любые идеи? Я просмотрел функции Dragonfly, но они тестируют только рендеринг изображения. сам по себе, не обнаруживая его существования на html-странице.


person oliverbarnes    schedule 16.03.2011    source источник


Ответы (1)


Отвечая на мой собственный вопрос, после поговорив с автором Dragonfly (он работает над тем, чтобы сделать это проще):

#route
match '/media/:dragonfly/:file_name', :to => Dragonfly[:images]  

#model
class Store
  include MongoMapper::Document
  key :photo_uid, String
  key :photo_name, String
  image_accessor :photo
end

#view
<%= image_tag @store.photo.thumb('274x207#').url(:suffix => "/#{@store.photo_name}") if @store.photo %>

#cucumber
Then I should see the image "my_photo.png"

Then /^I should see the image "(.+)"$/ do |image|  
  page.should have_xpath("//img[contains(@src, \"#{image}\")]")
end

Ключевым моментом является добавление в модель поля [attachment]_name, которое Dragonfly заполняет автоматически, а затем передает его в качестве суффикса в url(). И маршруты должны учитывать параметр :file_name помимо сгенерированного идентификатора стрекозы.

person oliverbarnes    schedule 18.06.2011