0

我有下面的测试,如果这个模型有任何固定装置,它会失败,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

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

4

3 回答 3

1

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

one:
  email: MyString

two:
  email: MyString

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

无论如何,将固定装置更改为这个固定的东西。

one:
  email: someguy@example.com

two:
  email: somegirl@example.com
于 2013-07-11T18:07:36.807 回答
0

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

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

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

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

于 2014-11-06T13:51:25.100 回答
0

打电话时可能验证失败InviteRequest#save?尝试替换savesave!并检查测试是否仍然通过。

于 2013-07-11T08:20:08.640 回答