5

私は機能する一意性のテストを持っています:

it { should validate_uniqueness_of(:name).case_insensitive }

ただし、名前について同様のテストを実行しようとすると失敗します

it { should validate_presence_of(:name).allow_blank }    

次のエラーが表示されます: undefined methodallow_blank'`

4

2 に答える 2

13

このリストによると、あなたがしたいことをサポートするvalidate_presence_ofに連鎖できるshouldaのメソッドはありません。ここでマッチャーのソースコードを見てください。

ただし、使用できる別のマッチャーがあります。

it { should allow_value("", nil).for(:name) }

空の値を属性に適用できるかどうかをテストします。

完全なテストは次のようになります

it { should validate_presence_of(:name) }    
it { should allow_value("", nil).for(:name) }
于 2012-07-10T14:05:52.403 に答える
0

私の知る限り、マッチャーはありませんので、使用するか、同様のものallow_blankを使用できます。allow_value(@subject.name.blank?)

補足として、実際に間違ったことをテストしているため、検証メソッド自体を使用してモデルの検証をテストすることはありません。問題のモデルの作成を使用してそれらをテストし、有効または無効なパラメーターを渡します。これにより、モデルをより正確に、実際の条件でテストできます。

于 2012-07-10T14:11:23.230 に答える