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天前为一条记录 -
检查你的范围只检索一个(正确的)