2011-07-18 6 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

なぜContentItemでこの操作を行うには、URLを通過する必要がありますか?なぜローカルobjを使用して何もしないのはなぜですか?

基本的には、ビューコードをここでモデルコードと混ざっているようです...モデルのオブジェクトはHTMLの値に依存してはいけません。ビュー内にいくつかの情報があります。それをContentItem モデルのメソッドに入れ、そのコードをビュー...またはこのレーキタスクから呼び出します。

編集:あなたは本当にURLを取得する必要がある場合 [OK]を....も - 文字通りのURLを取得します - Rubyのネット:: HTTPの宝石に見えます。 RailsはローカルURLの場合でもこれを標準では行いません。

これで、hpricotやnokogiriなどのパーサーを使用して結果を解析し、必要なタグを見つけることができます。

+0

Tarynが理想的だと私は同意します。問題は、情報がビュー内で把握されているため、モデルに移動できないということです。基本的には、サイトのフレームにロードしようとするときにフレームバストするWebサイトがあります。リモートURLにフレームバストが有効かどうかのデータベースレコードを保持しようとしています(これは、このレーキタスクが想定しているものです)彼らがバストしている場合、それらをロードしようとしないように)。 – Kvass

+0

私は基本的にURLをフレームしようとするページのGET httpリクエストを実行するレーキタスクを実行しようとしています。フレームが破棄された場合はデータベースにマークします。 – Kvass

+0

OK - 私は、途中であなたを助けることができるいくつかの例の宝石を与える編集を加えました。 net :: httpが実際にフレームバストを引き起こさないかもしれないので、幸運なことには難しいかもしれません。私はそれが実際にあなたのためにどのように現れるかわかりません。しかし少なくともそれはスタートです:) –

関連する問題