2011-08-11 14 views

Odpowiedz

24

Najprawdopodobniej dzieje, ponieważ nazwa zwyczaj tabela jest używana dla modelu (przy użyciu set_table_name) lub model jest w module.

Aby rozwiązać, trzeba dodać linię set_fixture_class w test_helper.rb przed „opraw: all” wiersz:

class ActiveSupport::TestCase 

    self.use_transactional_fixtures = true 
    . 
    . 
    . 
    set_fixture_class :my_table_name => "MyModule::MyClass" 

    fixtures :all 

end 

w tym przypadku plik Oprawy powinny być nazywane my_table_name.yml

+9

Jeśli twoja klasa nie jest w module (twoja odpowiedź nie jest w 100% jednoznaczna) może to być spowodowane dziwną nazwą modelu, której inflector Railsów nie wie, w jaki sposób poprawnie się leczyć. W takim przypadku lepiej byłoby dodać niestandardowy fleks w config/initializers/inflections.rb, ponieważ może to powodować problemy również w innych obszarach. – hermannloose

+2

Zostałem zwrócony ten sam błąd po dodaniu tego wiersza Mój błąd został zmieniony na ArgumentError: ArgumentError: porównanie String z Class failed – wasipeer

+2

@wasipeer: spróbuj 'set_fixture_class my_table_name: MyModule :: MyClass' –

1

UWAGA: Byłoby pomocne, gdyby dołączyć ślad stosu i pełny komunikat o błędzie.

W swojej klasie test/test_helper.rb, istnieje linia jak

fixtures :all 

Mówi ramy szukać w teście katalogu/opraw i spróbuj załadować każdy z plików YAML, że widzi tam a następnie zapisz je w DB. Więc moim przeczuciem jest to, że masz tam plik, który nie ma klasy w aplikacjach/modelach o zindywidualizowanej nazwie. Innymi słowy, jeśli istnieje plik test/fixtures/posts.yml, to po uruchomieniu testów framework będzie szukał klasy o nazwie Post, aby załadować dane.

Pierwszą rzeczą, którą zrobiłbym to sprawdź, czy masz plik urządzenia, który nie jest powiązany z jedną z twoich klas modelu (może usunąłeś model, ale zapomniałeś usunąć urządzenie?)

Jeśli to nie działa, spróbuj zmienić linię Twój pomocnik testowy do jawnego załadowania potrzebnych urządzeń. Więc jeśli tylko chcesz załadować osprzętu dla obiektu o nazwie post i obiekt o nazwie użytkownika, można zmienić:

fixtures :all 

do

fixtures :posts, :users 

w test_helper.rb i powinien pojawić się błąd odejść (chociaż inne błędy mogą się pojawić, ponieważ twoje uchwyty nie są loaded.0

+0

Dzięki za odpowiedź Rob. Tak naprawdę znalazłem rozwiązanie i dodałem jako odpowiedź tutaj. –

+0

Zauważ, że jeśli masz "fixtures: all" w wielu plikach testowych jednostek, musisz umieścić także set_fixture_class w każdym pliku, nie tylko w miejscach, w których zamierzasz używać urządzeń z tego modelu. To mnie naprawdę zdezorientowało, ale ma sens po kawie. Wolę, żeby jakoś ta informacja była SUCHA w samym modelu. – mcr

0

I Mam ten błąd, gdy popełniłem błąd, generując kod rusztowania. Użyłem nazwy w liczbie mnogiej, a to tylko myliło ładowanie urządzenia, tak myślę. Regeneracja rusztowania z pojedynczą nazwą modelu rozwiązała problem.

0

W przypadku, gdy klasa jest nieregularny klasa pod względem nazewnictwa, takich jak fish, sms mogłoby zostały utworzone za pomocą --force-plural flagę ja.e rails g model sms --force-plural

w tym przypadku byłoby skonfigurowaniu przegięcie, która jest tworzona na podstawie config/initializers/inflections.rb

Przykładem takiego jest ten

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.plural /^(ox)$/i, '\1en' 
    inflect.singular /^(ox)en/i, '\1' 
    inflect.irregular 'person', 'people' 
    inflect.uncountable %w(fish sheep) 
end 

W ten sposób klasa może być uznana za ciebie oświadczył to

Powiązane problemy