2010-11-09 6 views
6

umieścić następujący kod do testu RSpec:Shoulda validate_format_of. not_with ma problemu w ramach (lub w moim rozumieniu)

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

i konfiguracja rzeczywista klasy z:

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

I kiedy uruchomić testy I otrzymujemy:

Awarie: 1) Użytkownik Failure/Error: to powinno validate_format_of {(: e-mail) .not_with ('@ test test')} Expec ted błędy włączenia "nie może być puste", gdy e-mail jest ustawiony na "test @ test", dostał błędy: ["nazwa nie może być pusta (zero)", "e-mail jest nieprawidłowy (\" test @ test \ ") "] # ./spec/models/user_spec.rb:8:in` bloku (2 poziomy) w '

Kiedy zrobić test mijania jak:

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

Wszystko działa zgodnie z oczekiwaniami . Czy ktoś może mi powiedzieć, czy robię coś złego, czy jest to problem ramowy. Dziękuję Ci.

+0

Zakładając, że miałeś na myśli "test @ test" dla niewydolnej wartości testu, czyż nie? – zetetic

Odpowiedz

3

po prostu wpadł na podobny problem Okazuje się, że trzeba wywołać metodę with_message i dostarczyć dokładny komunikat o błędzie jako ciąg lub regex, który pasuje do komunikatu o błędzie. Dzięki temu przekonamy validate_format_of, aby zaprzestać upartego nalegania, by błędy formatowania powodowały komunikaty "nie mogą być puste", a właściwie przekazały. Na przykład:

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

staje

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

To na pewno wygląda jak błąd w bibliotece shoulda.

+0

Należy również pamiętać, że w przypadku "with" należy wywołać również komunikat with_message, ponieważ w przeciwnym razie błędnie odniesie on sukces, ponieważ na liście błędów sprawdzanego pola pojawi się komunikat "cant be blank". – thatothermitch

Powiązane problemy