2016-12-11 3 views
0

私は比較的新しいTDDです。wishlistが対応するuserなしで保存できないように、ユニットテストを書いていました。ここに私のgiftlistモデルクラスは次のとおりです。ここでアクティブなレコードの関連付けに暗黙の存在確認がありますか?

class Giftlist < ApplicationRecord 
    belongs_to :user 
end 

は私のユーザモデルクラスです:

class User < ApplicationRecord 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable 

    has_many :giftlists 
end 

私のテストは、次のようになります。

test 'wishlist must have an associated user' do 
    @giftlist = Giftlist.new 
    assert_not @giftlist.save, 'wishlist was saved without user' 
end 

私はこのテストは私ので、失敗する期待していました私のウィッシュリストモデルにvalidates :user, presence: trueを追加していません。しかし、私がレールを信じるように導いたテストは、外部キー協会に対していくつかの暗黙のバリデーションを行いました。

これは何が起こっているのですか?それとも別のことが起こっていますか?

答えて

1

この種の動作は、Shoulda Matchersを使用して表現する方が簡単だと思います。これにより、ボイラープレートを使わなくても、あなたの行動や期待を丁寧に書くことができます。

it { is_expected.to belong_to(:user) } 

しかし、どのようなあなたの当面の問題があると思われることはassert_notの不適切な使用です。 assert_not、私の文書を読むと、は、あなたが評価している式をと否定します(nilからtrueに変わります)。

このシナリオでは、テストオブジェクトに正常に保存されたことをアサートし、エラーメッセージを出力します。

test 'wishlist must have an associated user' do 
    @giftlist = Giftlist.new 
    assert @giftlist.save, 'wishlist was saved without user' 
end 
関連する問題