我想爲完美工作的模型編寫一個測試 - 但由於某種原因測試沒有返回預期的結果。工廠是否會自動在模型中運行方法?
我的模型包含此:
after_validation :set_conference
def rand_conference
r = rand.to_s[2..8]
while conference == r
r = rand.to_s[2..8]
end
r
end
def set_conference
self.conference = rand_conference unless conference.presence
end
end
而在我的模型試驗我測試這個(理想情況下,我將測試如果「會議」是一個6位數字,但現在只是一個「不是零」就足夠了):
廠:
FactoryGirl.define do
factory :plan do
name "Test"
description "Lorem Ipsum"
category "template"
end
end
Model_spec:
before (:each) do
@plan = build(:plan)
end
it "has a conference number" do
expect(@plan.conference).not_to be_empty
end
結果我得到:
1) Plan has a conference number
Failure/Error: expect(@plan.conference).not_to be_empty
NoMethodError:
undefined method `empty?' for nil:NilClass
是否factorygirl使用after_validation回調?
問題解決了,這就實現了。加分結構非常好的解釋!更進一步,還有@fivedigit的答案,它也適用。 –
很高興能幫到:) –