【问题标题】:Rails 4: Why do fixtures make this test fail?Rails 4:为什么夹具会使这个测试失败?
【发布时间】:2013-07-10 23:48:13
【问题描述】:

我有下面的测试,如果这个模型有任何固定装置,它会失败,total_unapproved 和 new_total 相等,而不是 new_total 少一个。 如果我删除加载 test_helper.rb 中的固定装置或将它们注释掉,它会按我的预期运行。

这是将批准设置为 true 的类函数。绝对有效。

def InviteRequest.approve_invites(number)
  inv_reqs = InviteRequest.where("approved = ?", false).first(number)
  inv_reqs.each do |inv_req|
    inv_req.approved = true
    inv_req.save
    inv_req.send_approved_email
  end
end

这是调用上述函数的测试。

require 'test_helper'

class InviteRequestTest < ActiveSupport::TestCase

  test "class method approve_invites(number) should approve 'number' InviteRequests" do
    # ensure there is at least one instance
    inv_req = InviteRequest.create(email: "hobojoe@test.com")

    # set all InviteRequests.approved to false
    InviteRequest.all.each {|r| r.approved = false; r.save}
    total_unapproved = InviteRequest.where("approved = ?", false).count
    Rails.logger.info "\nUnapproved Before: #{total_unapproved}"
    InviteRequest.approve_invites(1)
    new_total = InviteRequest.where("approved = ?", false).count
    Rails.logger.info "Unapproved After: #{new_total}\n"

    assert_equal total_unapproved - 1, new_total
  end 
end

知道为什么吗?我没有在任何其他测试中使用这些装置,但也许有一天我会。

【问题讨论】:

  • 我们是最能读心术的人 - 测试是如何失败的?
  • 对含糊不清感到非常抱歉。现在应该更清楚了。

标签: ruby-on-rails unit-testing testing ruby-on-rails-4 fixtures


【解决方案1】:

我的固定装置无效,更改它们解决了问题。 我仍然不确定事情是如何失败的。 我的灯具是这样的:

one:
  email: MyString

two:
  email: MyString

这将使我的唯一性验证失败并且不会保存,但我不确定为什么新创建的模型不会将 'approved' 设置为 true 并且仍然保存,因为它是正确的。

不管怎样,把固定装置改成这个固定的东西。

one:
  email: someguy@example.com

two:
  email: somegirl@example.com

【讨论】:

    【解决方案2】:

    当您调用InviteRequest#save 时,可能验证失败?尝试将save 替换为save! 并检查测试是否仍然通过。

    【讨论】:

    • 没有改变任何东西。看我的回答。
    【解决方案3】:

    当您为新模型使用 rails 生成器时,也会生成夹具文件,如下所示:

    one: {}
    # column: value
    two: {}
    #  column: value
    

    当您使用夹具运行测试时,rails 会尝试创建这 2 个空记录。如果您在迁移中有限制(例如 not null),您的测试将因明显原因而失败。

    解决方案: 注释掉您的夹具文件中的这些空记录或用一些合理的东西填充它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多