2012-10-28 19 views
8

Sto scrivendo alcuni test di unità per garantire che un modello Utente non possa avere una password < di 8 caratteri.Verifica della convalida della lunghezza della password con RSpec

Ho iniziato con un modello User:

class User < ActiveRecord::Base 
    ... 
    validates :password, :length =>{ 
    :minimum => 90, 
    :too_short => "password is too short, must be at least %{count} characters" 
    }, :on => :create 

end 

E un test user_spec.rb:

describe User do 
    subject { FactoryGirl.build :user } 

its(:password) { should have_at_least(8).items } 
end 

Comunque ho capito che questo in realtà non prova la mia convalida, solo alla prova che il mio la fabbrica aveva una password> = 8 caratteri.

Esiste un modo valido per eseguire questa operazione oltre a quella valida? metodo per password 0-7 caratteri?

La mia teoria è che se provo solo per 7 caratteri e qualcuno accidentalmente i codici hard che le password di 4 caratteri sono OK questo passerebbe la convalida ma non è realmente ciò che era inteso. Potrebbe esserci del codice diverso da quello in cui una password è composta da più di 8 caratteri (non probabile ma in altre situazioni potrebbe essere vera) e quindi consentire una password di 4 non è corretta.

In questo caso la persona che ha modificato la convalida della password nel modello non saprà che ha fatto qualcosa di sbagliato.

Vorrei solo sapere come testare correttamente situazioni come questa con TDD.

+0

non capisco il problema .. – apneadiving

risposta

2

Non so se questo risponde alla tua domanda, ma penso che siete al sicuro con qualcosa di simile:

class User < ActiveRecord::Base 
    validates :password, :length => {:minimum => 8 } 
end 

describe User do 
    it "validates password length" do 
    FactoryGirl.build(:user, password: "1234567").should_not be_valid 
    FactoryGirl.build(:user, password: "12345678").should be_valid 
    end 
end 

La ragione è che per questo test per lasciare che attraverso una password di 4 caratteri qualcuno avrebbe dovuto ho impostato una regola di validazione che dice che 4 caratteri sono ok, 7 non è ok, ma 8 è ok. Non è qualcosa che potrebbe accadere per caso.

+0

Questo è effettivamente ciò che già abbiamo. "Non qualcosa di probabile" significa che è ancora possibile ed è ciò che cercava di capire come evitare. Grazie comunque! –

Problemi correlati