2011-12-30 10 views
1

これは検証のための私のテストです。特に、検証のためにモデル仕様書を書く最良の方法を探したいと思います。しかし、私はこのコードには以下の問題があります。rspecテストモデルの妥当性検査(サブジェクトエラーあり)

require 'spec_helper' 

describe Ad, :focus do 
    let(:ad) { Ad.sham!(:build) } 

    specify { ad.should be_valid } 

    it "not creates a new instane given a invalid attribute" do 
    ad = Ad.new 
    ad.should_not be_valid 
    end 

    [:title, :category_id, :email, :ad_content, :name, :price].each do |attr| 
    it "should require a #{attr}" do 
     subject.errors[attr].should include("blank") 
    end 
    end  
end 

私はこの仕様を実行すると、私はこのエラーが表示されます。ここ

5) Ad should require a name 
    Failure/Error: subject.errors[attr].should include("blank") 
     expected [] to include "blank" 
     Diff: 
     @@ -1,2 +1,2 @@ 
     -blank 
     +[] 
    # ./spec/model/ad_spec.rb:15:in `block (3 levels) in <top (required)>' 

答えて

4

問題は、あなたがエラーをチェックする前にその例でvalid?を呼び出していないということです。前の例では(間接的に)呼び出していますが、間違っていると主張しているものではありません。

正しい方法はこれです:

[:title, :category_id, :email, :ad_content, :name, :price].each do |attr| 
    it "should require a #{attr}" do 
    subject.valid? 
    subject.errors[attr].should include("blank") 
    end 
end 
+0

おかげで再びレーダー:) – tomekfranek

関連する問題