【问题标题】:Rails 4 / RSpec - Testing time values persisted to MYSQL database in controller specsRails 4 / RSpec - 测试时间值在控制器规范中持久保存到 MYSQL 数据库
【发布时间】:2015-08-24 23:57:48
【问题描述】:

我正在为我的 Rails 应用程序编写非常标准的 RSpec 控制器测试。我遇到的一个问题是简单地测试时间值是否已保留在更新操作中。

在我的控制器中,我有:

def update
  if @derp.update_attributes(derp_params)
    redirect_to @derp, flash: {success: "Updated derp successfully."}
  else
    render :edit
  end
end

@derp 有一个时间类型的时间属性。我可以在更新操作中测试它的所有其他属性,如下所示:

describe "PATCH #update" do
  before do
    @attr = { 
      attribute_1: 5, attribute_2: 6, attribute_3: 7,
      time: Time.zone.now
    }
  end
end

我得到的错误是:

1) DerpsController logged in PATCH #update updates the derps's attributes
 Failure/Error: expect(derp.time).to eq(@attr[:time])

   expected: 2015-08-24 18:30:32.096943000 -0400
        got: 2000-01-01 18:30:32.000000000 +0000

   (compared using ==)

   Diff:
   @@ -1,2 +1,2 @@
   -2015-08-24 18:30:32 -0400
   +2000-01-01 18:30:32 UTC

我尝试过使用 Timecop 并与 to_s 或 to_i 进行比较...但数据类型 time 的每个属性都完全关闭了。我看过一些帖子说你怎么能期望它在 1 秒内以及如何处理它,但看起来我的这一年已经完全结束了?

这并不难——我只是想测试一下控制器是否可以花时间发送给它并将其保存到数据库中。

我在这里错过了什么?

编辑:几天后这里没有帮助。让我尝试重新迭代正在发生的事情 - 日期被剥离,因为它是 MYSQL 类型的 TIME。注意 2000-01-01...

【问题讨论】:

    标签: mysql ruby-on-rails-4 activerecord time rspec


    【解决方案1】:
      let(:time) {'Mon, 24 Aug 2015 23:19:09'}
      describe "PATCH #update" do
          before do
            @attr = { 
              attribute_1: 5, attribute_2: 6, attribute_3: 7,
              time: time.in_time_zone('Eastern Time (US & Canada)').to_datetime
            }
          end
        end
    

    与其将Time.zone.now 保存在记录中,不如定义一个time 变量并使用该时间更新记录,以便您知道应该将哪个时间保存在数据库中。然后,当您进行比较时,希望能恢复那个时间。

    【讨论】:

    • 这仍然对我不起作用:预期:2015-04-20 16:20:08.000000000 -0400 得到:2000-01-01 16:20:08.000000000 +0000
    【解决方案2】:

    我最终这样做了:

    let(:time) {'01 Jan 2000 16:20:00'}
    

    我真的找不到任何关于 Rails 如何或为什么将时间存储为 2000-01-01 的好解释,或者任何格式化时间的辅助方法。我检查了控制器参数,它实际上被发送到控制器,其中包含 2000-01-01 日期。

    有些人说只使用日期时间,但我真的想存储一天中的时间,所以我认为这对这个用例没有意义。

    无论如何,我可以在我的规范和工作中的任何地方使用那个时间变量。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      相关资源
      最近更新 更多