2010-11-09 29 views
6

je mets le code suivant dans un test RSpec:Shoulda validate_format_of. not_with a un problème dans le cadre (ou dans ma compréhension)

it { should validate_format_of(:email).not_with('[email protected]')} 

et la configuration de la classe réelle avec:

validates :email, :presence => true, :format => /\b[A-Z0-9._%-][email protected](?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i 

Et quand je lance les essais Je reçois:

échecs: 1) L'utilisateur Panne/erreur: il doit {validate_format_of (: email) .not_with ('test @ test')} Expec Les erreurs de ted doivent inclure "ne peut pas être vide" quand email est mis à "test @ test", a obtenu des erreurs: ["nom ne peut être vide (nil)", "email est invalide (\" test @ test \ ") "] # ./spec/models/user_spec.rb:8:in` bloc (2 niveaux) dans '

Quand je fais un test de passage comme:

it { should validate_format_of(:email).with('[email protected]')} 

Tout fonctionne comme prévu . Quelqu'un peut-il me dire si je fais quelque chose de mal ou si c'est un problème de cadre? Je vous remercie.

+0

En supposant que vous vouliez dire 'test @ test' pour la valeur de test défaillante, est-ce correct? – zetetic

Répondre

3

Je viens de rencontrer un problème similaire s'avère que vous devez appeler la méthode with_message et fournir le message d'erreur exacte comme une chaîne ou une expression régulière qui correspond au message d'erreur. Cela convaincra le validate_format_of de cesser d'insister sur le fait que les erreurs de format entraînent des messages «ne peut pas être vide» et passent effectivement. Par exemple:

it { should validate_format_of(:email).not_with('[email protected]')} 

devient

it { should validate_format_of(:email).not_with('[email protected]').with_message(/invalid/)} 

Cela semble sûr comme un bug dans la bibliothèque de Shoulda.

+0

Notez également que vous devez également appeler with_message sur les cas "with", sinon il va réussir par erreur car il cherche "ne peut pas être vide" dans la liste des erreurs du champ en cours de validation. – thatothermitch