Rails测试具有日期范围的named_scope

情景
我在名为’last_week’的模型上有一个named_scope。 它所做的就是从上周获取记录。

我想测试这个,我的方法是测试返回的结果是否在一定范围内。 我不知道这是否是在类方法上测试此function的正确方法。

我不能使用RSpec,Shoulda或其他第三方客户端插件。 如果我愿意,我只允许使用摩卡。

# Model class Article  { :created_at => 1.week.ago..DateTime.now.end_of_day } end #Test class ArticleTest < ActiveSupport::TestCase test "named scope :last_week " do last_week_range = DateTime.now.end_of_day.to_i - 1.week.ago.to_i assert_in_delta last_week_range, Article.last_week.first.created_at - Article.last_week.last.created_at, last_week_range end end 

寻找关于这种方法的正确与错误的反馈。

首先你的范围是错误的:因为代码是动态执行的,你的日期范围条件将取决于你启动服务器的时间……

用。。。来代替:

 scope :last_week,  lambda { :conditions => { :created_at => 1.week.ago..DateTime.now.end_of_day } } 

其次,为了测试,我会创建一些记录并检查范围是否正确:

  • 创建一个工厂

  • 创建两条记录

  • 设置created_at 1周+ 1天前为一条记录

  • 检查你的范围只检索一个(正确的)