[英]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.