[英]Rails 4: Why do fixtures make this test fail?
我在下面進行測試,並且如果該模型有任何固定裝置,它將失敗,並且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
知道為什么嗎? 我沒有在其他任何測試中使用燈具,但也許有一天我會使用。
我的裝置無效,更換它們可以解決問題。 我仍然不確定到底是怎么回事。 我的燈具看起來像這樣:
one:
email: MyString
two:
email: MyString
這將使我的唯一性驗證失敗,並且無法保存,但是我不確定為什么新創建的模型不會被“批准”設置為true,並且由於正確而仍然被保存。
無論如何,將固定裝置更改為此固定的東西。
one:
email: someguy@example.com
two:
email: somegirl@example.com
調用InviteRequest#save
時,驗證可能會失敗? 試圖取代save
有save!
並檢查測試是否仍然通過。
當您將rails generator用於新模型時,也會生成夾具文件,如下所示:
one: {}
# column: value
two: {}
# column: value
當您使用燈具運行測試時,rails會嘗試創建這2個空記錄。 如果您的遷移受到限制(例如不為null),則由於明顯的原因,測試將失敗。
解決方案:注釋掉燈具文件中的空記錄,或者用明智的方式填充它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.