3

rspecでテストしているときに、オブジェクトを反復処理してその属性を変更しようとしています。アイデアは、文字列が長すぎないことをテストすることです(最大255文字)。非常に多いので、コードの繰り返しを避け、オブジェクトの属性を繰り返し処理したいと思います。

私はこの質問のおかげで次のことを思いついた:

[ :city, :email, :first_name, :last_name, :office_name, :street ].each do |attr|
    c.send("#{attr}=", long_string)
    c.errors[attr].should include "is too long (maximum is 255 characters)"
end

ただし、コンソールには

expected [] to include "is too long (maximum is 255 characters)"

long_stringは実際には1000文字の長さであるため、問題になることはありません。それに応じたモデルでは、上記の各属性の最大長が255であることをすでに確認しています。割り当て中に何か間違ったことをしているのか、それともテストが機能しないのかはよくわかりません。

4

2 に答える 2

2

あなたのステートメントとステートメントのc.valid?間に挟み込みます。c.sendc.errors

つまり、アクセスする前にc.errors

モデルが検証されるまで、errors配列は空です。チェックするvalid?か、保存しようとしたときに。

errorsアレイと検証の詳細については、 ValidationsRailsGuideを参照してください。

于 2012-12-31T02:53:38.987 に答える
2

ActiveRecordを使用している場合は、errors検証がトリガーされるまで入力されないと思います。

[ :city, :email, :first_name, :last_name, :office_name, :street ].each do |attr|
    c.send("#{attr}=", long_string)
    c.valid? # Run validations by asking is the record is valid
    c.errors[attr].should include "is too long (maximum is 255 characters)"
end
于 2012-12-31T02:53:42.173 に答える