2010-11-09 7 views
6

ho messo il seguente codice in un test RSpec:Shoulda validate_format_of. not_with ha problema nel quadro (o nella mia comprensione)

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

e la configurazione della classe reale con:

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

E quando esegue il test ottengo:

fallimenti: 1) L'utente guasto/Errore: è {dovrebbe validate_format_of (: e-mail) .not_with ('test @ test')} Expec errori ted da includere "non può essere vuoto" quando l'e-mail è impostata su "test @ test", ha errori: ["nome non può essere vuoto (nil)", "email non è valida (\" test @ test \ ") "] # ./spec/models/user_spec.rb:8:in` blocco (2 livelli) in '

Quando faccio un test di passaggio come:

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

Tutto funziona come previsto . Qualcuno può dirmi se sto facendo qualcosa di sbagliato o se questo è un problema di struttura. Grazie.

+0

Supponendo che si intende "test @ test" per il valore del test non riuscito, corretto? – zetetic

risposta

3

Ho appena incontrato un problema simile risulta è necessario richiamare il metodo with_message e fornire il messaggio di errore esatto come una stringa, o di una regex che corrisponde al messaggio di errore. In questo modo convincerà il validate_format_of di cessare la sua ostinata insistenza sul fatto che gli errori di formattazione comportano messaggi "non possono essere vuoti" e in realtà passano. Per esempio:

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

diventa

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

questa sicura appare come un bug nella libreria shoulda.

+0

Nota anche che è necessario invocare with_message nei casi "with", altrimenti avrà un esito errato perché sta cercando "non può essere vuoto" nell'elenco degli errori del campo che viene convalidato. – thatothermitch