2009-04-08 12 views
5

Kiedy biegnę post w moich Rails testową funkcjonalnyDlaczego wysyłanie wiadomości nie powiodło się w moim teście funkcjonalności Rails?

setup do 
    post :create, :user => Factory.attributes_for(:user) 
end 

i to się nie powiedzie, nie dostanę żadnej informacji zwrotnej, dlaczego. Wiem, że to się nie powiedzie, ponieważ moje twierdzenie, aby upewnić się, że istnieje jeden dodatkowy rekord w bazie danych, kończy się niepowodzeniem.

Próbowałem zrobić

setup do 
    post :create, :user => Factory.attributes_for(:user) 
    assert_valid @controller.object 
end 

ale obiekt jest chroniony sposób.

Jak mogę sprawdzić błędy w obiekcie modelu, które wynikają z połączenia?

Używam marki Shoulda and Factory Girl, ale podejrzewam, że to nie ma znaczenia.

Odpowiedz

6

Dodaj następującą tezę:

assert_nil assigns(:user).errors 

Które zawiedzie jeśli były błędy zapisywania obiektu (być może walidacji), i pokaże wartość błędów sprzeciwu.

+0

, który robi dokładnie to, co chcę. dzięki! – dbrown0708

+0

Dzięki! Bardzo mi to pomogło! :) – CalebHC

0

Używam szyn 3.2.13 i wygląda na to, że assert_nil nie działa poprawnie, jak podano w poprzedniej odpowiedzi.

To jest to, co pracował dla mnie:

assert_empty assigns(:user).errors 

wierzę, to dlatego, że nawet udane „zapisz” wywołanie zwraca ActiveRecord: Błędy obiekt zawierający z pustym hash „wiadomości”, więc można również zrobić to:

assert_empty assigns(:user).errors.messages 
Powiązane problemy