Proszę o pomoc!

Witam,
Mam problem z testami w Railsach.
Stworzyłem dwa modele: Client i Account
Modele są połączone między sobą.
Account w database posiada rekord client_id ( not null).
Mój problem jest następujący: kiedy robię testy z modelem Client bez tworzenia kont z Account, zawsze mam ten błąd:
ClientTest#test_to_s:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException: NOT NULL constraint failed: accounts.client_id: INSERT INTO “accounts” (“client_id”, “number”, “balance”, “created_at”, “updated_at”, “id”) VALUES (NULL, 1, 1, ‘2015-01-05 15:16:34’, ‘2015-01-05 15:16:34’, 980190962).

Mój schema.rb: https://ideone.com/XpBrjp

Zauważyłem, że Rails podczas tworzenia nowego klienta automatycznie tworzą puste konto.
Czy można to wyłączyć ?
Tutaj kod modeli: https://ideone.com/WsS7o2
Dodatkowo mam tylko modele, nie tworzyłem żadnych controllerów, czy innych klas, czy metod…

Wincyj kodu!
A jeśli nie chcesz żeby Ci się kod wywracał na constraint’cie w bazie danych (nie chcesz) to dodaj do Account
validates :client, presence: true

Witam,
dodaję kod testów https://ideone.com/UV0YS4 … Testy Clienta działały dopóki nie dodałem modelu Account… dziwne jest że przy tworzeniu w teście obiektu klienta on na silę dodaje puste konto

Nie mam pojęcia na jakiej bazie odpalasz te testy (masz od tego bazę testową czy lecą na developmencie?). Po cichutku zakładam, że na teście, spróbuj odpalić

rake db:migrate:reset
rake db:test:prepare

I odpal te testy jeszcze raz

Dzięki za szybką odpowiedź… niestety to nie działa… wszystko mam na sqlite Całą “aplikacje” wrzuciłem na gita https://github.com/alcaponepl/bankpl

Dobra, biorąc pod uwagę wartości z tego błędu i to co masz w fixtures i w test_helper, na Twoim miejscu wyrzuciłbym od razu fixtures :all z test_helpera, najlepiej wyrzuć wszystkie fixtures. Po tym Ci zadziała. Ze swojej strony polecam jak najszybciej zacząć pisać testy w rspecu

1 Like

Dzięki Wielki !, Dopiero co zacząłem zabawę z Railsami i takie błędy ;p na razie próbuję ogarnąć podstawy … wszystko działa jeszcze raz dzięki… i spróbuję te respeci używać

Z czystej ciekawości - dlaczego w RSpec’u? Zgodnie z moją wiedzą (głównie Reddit, fora) wiele osób przechodzi na MiniTest (łatwiejszy dla początkującego, szybsze testy).

Rozumiem, że RSpec głównie dla tego, że już jest wykorzystywany przez dany team?

Pozdrawiam,
MR

z ciekawości zapytam ile jest tych osób ?

danych ilościowych nie znam :wink: zastanawiam się czy zacząć naukę RSpec’a czy zostać przy MiniTest’cie, stąd pytanie.

@Mikeroz to inaczej, gdzie to słyszałeś ?

Reddit, trochę blogów (jak np. Brandon Hilkert, [w tym wpisie][1]).
edit: na reddicie głównie r/LearnRails bodajże.
[1]: http://brandonhilkert.com/blog/rails-gemfile-teardown-2014/