2013-04-16 326 views
0

我正在使用rspec編寫模型規範測試,嵌套模型深度達到3級。每個->代表has_many的關係。Rails嵌套模型未通過驗證

Users->Goals->Milestones

現在,我的spec/models/milestone_spec.rb測試失敗一個be_valid檢查,我有點難倒了,爲什麼發生這種情況。

Failures: 

    1) Milestone 
    Failure/Error: it { should be_valid } 
     expected valid? to return true, got false 
    # ./spec/models/milestone_spec.rb:17:in `block (2 levels) in <top (required)>' 

的規範本身:

describe Milestone do 
    let(:user) { FactoryGirl.create(:user) } 
    let(:goal) { user.goals.build(content: "Loreum Ipsum", amount: "30", interval: 2) } 
    before do 
    @milestone = goal.milestones.build(amount: "20") 
    end 

    subject { @milestone } 

    it { should respond_to(:goal_id) } 
    it { should respond_to(:amount) } 
    # not sure why this isn't working 
    it { should be_valid } 

難道是跟我是如何創造@milestone?我試過goal.milestones.new,這似乎沒有什麼區別。在規範下面我有一些測試字段正確驗證,並且運行良好。

任何想法?

+0

不是試圖驗證它是否有效,而是調用'valid?',然後檢查錯誤數組是否爲空。這將提供更有用的失敗信息。 –

回答

1

試試這個:

it "should be valid" do 
    @milestone.valid? 
    puts @milestone.errors.full_messages 
end 

將運行驗證,並打印出的驗證錯誤給你,讓你可以看到發生了什麼事情。