簡體   English   中英

Rails 4:夾具為什么會使測試失敗?

[英]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時,驗證可能會失敗? 試圖取代savesave! 並檢查測試是否仍然通過。

當您將rails generator用於新模型時,也會生成夾具文件,如下所示:

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

當您使用燈具運行測試時,rails會嘗試創建這2個空記錄。 如果您的遷移受到限制(例如不為null),則由於明顯的原因,測試將失敗。

解決方案:注釋掉燈具文件中的空記錄,或者用明智的方式填充它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM