Rspec请求测试中的竞争条件

时间:2012-03-13 03:21:05

标签: ruby-on-rails rspec

我有一个问题,我在验证当前时间是否已插入到html中(用于使用javascript进行time_ago种类)。

当前的unix时间(epoch)在给定的html元素的数据数据属性中呈现,在这种情况下是这样的:

<a href="/somewhere" data-last-points-awarded-at="1331606458">Something Happend</a>

但是当我的测试运行时:

recipe = Factory(:recipe, name: "Apple Pie", user: @user)

visit some_path

time_in_layout = find('a[data-last-points-awarded-at]')['data-last-points-awarded-at']
current_time = Proc.new { Time.now }.call.to_i.to_s

time_in_layout.should eql(current_time)

运行我的测试后,它失败了...但只是勉强:

Failure/Error: time_in_layout.should eql(current_time)

   expected: "1331606459"
        got: "1331606458"

   (compared using eql?)

一切都很好,测试几乎就是我真正希望它工作的方式,然而,proc返回的时间是一秒钟之后,我该如何解决这个问题呢?就像我如何在测试开始时锁定时间一样,我甚至可以做这样的事情吗?

1 个答案:

答案 0 :(得分:2)

查看TimeCop,因为它完全符合您的要求。