2012-10-28 6 views
8

Piszę niektóre testy jednostkowe, aby upewnić się, że model użytkownika nie może mieć hasła o długości 8 znaków: <.Testowanie sprawdzania poprawności hasła za pomocą RSpec

zacząłem z modelem użytkownika:

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

end 

a test user_spec.rb:

describe User do 
    subject { FactoryGirl.build :user } 

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

jednak zdałem sobie sprawę, że to nie faktycznie przetestować poprawności, to tylko testy, które mój fabryka miała hasło> = 8 znaków.

Czy jest to dobry sposób na zrobienie tego innego niż testowanie poprawnego? metoda dla haseł 0-7 znaków?

Moja teoria jest taka, że ​​jeśli testuję tylko 7 znaków, a ktoś przypadkowo twarde kody, że 4-znakowe hasła są w porządku, przejdzie to sprawdzanie poprawności, ale tak naprawdę nie jest to zamierzone. Może istnieć jakiś kod, w którym to zależy od hasła składającego się z więcej niż 8 znaków (mało prawdopodobne, ale w innych sytuacjach może być prawdą), a zatem dopuszczenie hasła 4 jest nieprawidłowe.

W takim przypadku osoba, która zmieniła weryfikację hasła w modelu, nie będzie wiedziała, że ​​zrobiła coś złego.

Chciałbym tylko wiedzieć, jak poprawnie przetestować takie sytuacje z TDD.

+0

Nie rozumiem problemu .. – apneadiving

Odpowiedz

2

Nie wiem, czy to odpowiada na Twoje pytanie, ale myślę, że są bezpieczne ze coś takiego:

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 

Powodem jest to, że ten test do niech przez 4 znakowym hasłem ktoś musiałby ustawiono regułę sprawdzania poprawności, która mówi, że 4 znaki są w porządku, 7 nie jest w porządku, ale 8 jest w porządku. Nie coś, co może się stać przypadkiem.

+0

to skutecznie, co już mamy. "Nie jest to coś prawdopodobnego" oznacza, że ​​wciąż jest możliwe i staramy się wypracować sposób uniknięcia. W każdym razie dzięki! –