Mam problem z unit testami i validates_inclusion_of. Validates_inclusion_of sprawdza,czy category_id podane w formularzu znajduje się w bazie danych z kategoriami. W modelu mam takie linijki:
class Item < ActiveRecord::Base
...
validates_inclusion_of :category_id, :in => Category.all.map { |c| c.id }
...
end
Test poniżej wypisuje, że category_id nie zgadza się z tym, który jest w bazie. Zrobiłem sobie sprawdzenie i w before_validation wypisałem wszystko co jest w bazie danych. Wychodzi na to, że w bazie są dwa rekordy, które wstawiłem ręcznie, jeden z nich to ten, które w teście jest opisany jako categories(:one).
Nie wiem co jest, test zwraca błąd walidacji i błędny category_id mimo, że ten przekazany w konstruktorze jest identyczy z categories(:one)
class ItemTest < ActiveSupport::TestCase
fixtures :items, :users, :categories
test "should create item" do
assert !Category.all.empty?
item = Item.new(:user => users(:tom), :title => 'a', :category_id => categories(:one).id)
assert item.valid?, item.inspect # błąd walidacji, wyrzuca obiekt, z wartoscia category_id przekazaną wyżej
assert !item.errors.invalid?(:user)
assert !item.errors.invalid?(:title)
assert !item.errors.invalid?(:category_id) # błąd
end
end
Dla sprawdzenia wywaliłem z modelu validates_inclusion_of i sprawdziłem jak się zachowa test. Test przeszedł poprawnie, więc wina leży w tejże linijce. Czy to jest możliwe, że w momencie, gdy wywoływane jest item.valid? - baza jest pusta?
Nie wiem co jest, domyślam się, że to jakiś prosty błąd i pewnie ktoś będzie wiedział co jest nie tak. Bardzo proszę o pomoc.