簡體   English   中英

Rails RSpec測試無法正確通過

[英]Rails RSpec Test Does not Pass Correctly

我正在用RSpec為Cookbook模型編寫模型測試。 每個用戶has_many食譜,並且每個食譜belongs_to一個用戶。 為了確保沒有用戶無法創建Cookbook ,我編寫了以下測試:

it "is invalid without a user" do
  expect(FactoryGirl.build(:cookbook, user: nil)).to be_invalid
end

但是,在運行rspec ,我得到以下輸出:

1) Cookbook is invalid without a user
   Failure/Error: expect(FactoryGirl.build(:cookbook, user: nil)).to be_invalid
   NoMethodError:
     undefined method `cookbooks' for nil:NilClass

因此,為了測試引發的錯誤,我進行了如下測試:

it "is invalid without a user" do
  expect{FactoryGirl.build(:cookbook, user: nil)}.to raise_error(NoMethodError)
end

但是,該測試也失敗,並顯示以下輸出:

1) Cookbook is invalid without a user
   Failure/Error: expect{FactoryGirl.build(:cookbook, user: nil)}.to raise_error(NoMethodError)
     expected NoMethodError but nothing was raised

如果有什么用,這里是食譜的工廠:

require 'faker'

FactoryGirl.define do
  factory :cookbook do |f|
    f.title "#{Faker::Name.first_name}'s recipes"
    f.description "#{Faker::Name.last_name}'s favorite recipes."
    f.user 1
  end
end

我應該如何編寫模型測試,以確保在創建Cookbook時需要用戶?

在模型內,您可能需要進行一些驗證,或者在調用User模型上的bookshelves回調之前進行驗證。 當您在測試中調用be_invalid時,RSpec調用是否valid? 通過FactoryGirl構建的對象上。 該對象運行驗證,並且由於嘗試在nil對象(用戶)上調用bookshelves而引發錯誤。

當您測試錯誤引發時,是不會發生的,因為valid? 沒有在對象上被調用。 因此,如果您這樣做,則測試將引發錯誤:

it "is invalid without a user" do
  expect{FactoryGirl.build(:cookbook, user: nil).valid?}.to raise_error(NoMethodError)
end

但是,我不建議您僅對測試進行更改以使其通過。 在調用模型bookshelves之前,您應該先查看模型並檢查用戶是否存在。 如果不這樣做,每當您嘗試在沒有用戶的情況下創建Cookbook時,您的應用都會中斷。

暫無
暫無

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

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