0

我有下面的测试,如果有任何这种模型的装置,它会失败total_unapproved和new_total相等,而不是new_total少一个。 如果我删除加载test_helper.rb中的灯具或将它们注释掉,它就像我期望的那样运行。Rails 4:为什么灯具会使这个测试失败?

以下是将批准设置为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: "[email protected]") 

    # 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 

任何想法为什么?我没有在任何其他测试中使用灯具,但也许我会有一天。

+0

我们是mindreaders - 测试如何失败? – sevenseacat

+0

对模糊性感到非常抱歉。现在应该更清楚了。 – kjs3

回答

0

当您致电InviteRequest#save时可能验证失败?尝试用save!代替save并检查测试是否仍然通过。

+0

没有改变任何东西。看到我的答案。 – kjs3

1

我的灯具无效,并且更改它们可以解决问题。 虽然我仍然不确定事情是如何失败的。 我的灯具是这样的:

one: 
    email: MyString 

two: 
    email: MyString 

这将失败,我唯一的验证和不救,但我不知道为什么新创建的模型就不会“批准”设置为true,仍然被保存,因为它的正确。

无论如何,改变固定装置到这个固定的东西。

one: 
    email: [email protected] 

two: 
    email: [email protected] 
0

当您使用Rails生成新的模型,夹具文件中生成,以及看起来像这样:

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

当您使用夹具运行测试,轨尝试创建这2个空记录。如果您在迁移时遇到了限制(例如不为空),则由于显而易见的原因,您的测试将失败。

解决方法:在你的灯具文件 评论了这个空记录或与一些明智的填充。