Rails - использовать RSpec-методы "get" и "response" в задаче Rake
Я знаю, что в RSpec есть полезные методы "get" и "response.should" для запуска интеграционных тестов - я хочу знать, как я могу использовать эти (или другие методы для достижения того же результата) в задаче Rake:
desc "Check all content items with type 0 and do something"
task :my_task => :environment do
ContentItem.where("content_type = ?", 0).each do |obj|
get "/my_path/"+obj.value
if (response has a certain html tag)
perform some action on obj
end
end
end
Я знаю, что не могу просто запустить такие методы rspec, но это то, что мне нужно сделать, и мне нужно иметь возможность обрабатывать информацию, возвращаемую при открытии /my_path/obj.value. У кого-нибудь есть предложения?
1 ответ
Почему вам нужно пройти через URL, чтобы выполнить это действие с вашим ContentItem? Почему бы просто не использовать местный объект и делать вещи?
В основном это выглядит так, как будто вы смешиваете код представления с кодом модели здесь... объект модели не должен зависеть от значений в html... если в представлении есть какая-то информация, которую нужно выяснить... поместите ее в метод в модели ContentItem и вызовите этот код из представления... или из этой грабли.
Редактировать: Хорошо.... хорошо, если вам действительно нужно ПОЛУЧИТЬ URL - загляните в рубиновый гем Net::Http - он будет буквально получать URL. Rails не делает это как стандарт... даже для локальных URL.
После этого вы сможете использовать такой синтаксический анализатор, как hpricot или nokogiri, чтобы проанализировать результаты и найти нужный тег.