2011-07-18 46 views
1

我知道RSpec具有有用的方法「get」和「response.should」來運行集成測試 - 我想知道如何使用這些(或其他的方法來達到同樣的效果)在Rake任務:Rails - 在Rake任務中使用RSpec「get」和「response」方法

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 模型上的一個方法中,並從視圖中或從這個rake任務中調用該代碼。

編輯: 好....如果你真的需要獲取一個網址 - 查看Ruby的Net :: Http gem - 這將真正地獲取URL。 Rails並沒有將其作爲標準......即使是本地URL。

然後,您可以使用解析器(如hpricot或nokogiri)解析結果以找到所需的標記。

+0

我同意Taryn,這將是理想的 - 問題是,信息正在計算出的視圖,所以我不能將其移動到模型。基本上,有些網站在我們嘗試將它們加載到我們網站的框架中時有時會丟幀,並且我們試圖保留數據庫記錄,以確定遠程URL是否啓用了幀清除功能(這就是這個耙子任務應該是這樣的這樣做),以便我們不嘗試加載它們,如果它們被破壞。 – Kvass

+0

所以我試圖運行一個耙子任務,基本上運行一個GET HTTP請求的頁面,試圖框架的網址,然後如果框架被搗毀標記它在數據庫中。 – Kvass

+0

好的 - 我添加了一個編輯功能,可以爲您提供一些示例性的寶石,可以幫助您在途中。祝你好運 - 聽起來像它可能會很棘手,因爲即使net :: http可能實際上不會觸發一個框架。我不知道這會如何爲你顯示。但至少這是一個開始:) –

相關問題