2011-07-18 2 views
1

Я знаю, что RSpec имеет полезные методы «get» и «response.should» для запуска интеграционных тестов. Я хочу знать, как я могу использовать эти (или другие методы, чтобы добиться того же результата) в Rake задачи:Rails - использовать методы RSpec «get» и «response» в Rake task

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. У кого-нибудь есть предложения?

ответ

0

Почему вам нужно пройти через URL-адрес, чтобы выполнить это действие с помощью ContentItem? Почему бы просто не использовать локальный obj и не делать?

В принципе, похоже, что вы смешиваете код вида с кодом модели здесь ... объект модели не должен зависеть от значений в html ... если в представлении есть какая-то информация. . Поместите его в метод на ContentItem модели и вызовите этот код либо из представления ... или из этой задачи рейка.

Редактировать: Хорошо .... ну, если вам действительно нужно ПОЛУЧИТЬ URL-адрес - загляните в Ruby's Net :: Http gem - это будет буквально извлекать URL-адреса. Rails не делает это стандартным ... даже для локальных URL-адресов.

Возможно, вы сможете использовать синтаксический анализатор, такой как hpricot или nokogiri, для анализа результатов, чтобы найти тег, который вам нужен.

+0

Я согласен с Тарином, что было бы идеальным - проблема в том, что информация отображается в представлении, поэтому я не могу переместить ее в модель. В основном есть веб-сайты, которые иногда сбой кадров, когда мы пытаемся загрузить их в фрейме на нашем сайте, и мы пытаемся сохранить запись базы данных о том, включен ли удаленный URL-адрес для перебора фреймов (вот что такое задача рейка делать), чтобы мы не пытались загрузить их, если они разрушили. – Kvass

+0

Итак, я пытаюсь запустить задачу rake, которая в основном запускает HTTP-запрос GET для страницы, которая пытается сфотографировать URL-адрес, а затем, если фрейм был поврежден, отметьте его в базе данных. – Kvass

+0

OK - Я добавил редактирование, которое дает вам некоторые примеры драгоценных камней, которые могут помочь вам на вашем пути. Удачи - кажется, что это может быть сложно, потому что даже net :: http не может фактически вызвать фрейм-бюст. Я не знаю, как это на самом деле проявится для вас. Но, по крайней мере, это начало :) –