2011-07-18 42 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可能实际上不会触发一个框架。我不知道这会如何为你显示。但至少这是一个开始:) –

相关问题