При выполнении моих тестов я получаю эту ошибку:
FixtureClassNotFound: No class attached to find
Что вызывает эту ошибку и как ее исправить?
При выполнении моих тестов я получаю эту ошибку:
FixtureClassNotFound: No class attached to find
Что вызывает эту ошибку и как ее исправить?
Скорее всего, это происходит из-за того, что для модели используется пользовательское имя таблицы (с использованием имени set_table_name) или модель находится в модуле.
Чтобы решить проблему, вам нужно добавить строку set_fixture_class в test_helper.rb до строки "fixtures: all":
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
.
.
.
set_fixture_class :my_table_name => "MyModule::MyClass"
fixtures :all
end
В этом случае файл fixtures следует называть my_table_name.yml
ПРИМЕЧАНИЕ. Было бы полезно включить трассировку стека и полное сообщение об ошибке.
В вашем классе test/test_helper.rb есть строка типа
fixtures :all
Это говорит о том, что структура должна искать в test/fixtures каталога и пытаться загрузить каждый из файлов YAML, которые он там видит, а затем сохранить их в БД. Поэтому я подозреваю, что у вас есть файл, который не имеет класса в app/models с уникальным именем. Другими словами, если есть файл test/fixtures/posts.yml, то при запуске тестов среда будет искать класс с именем Post для загрузки ваших данных.
Итак, первое, что я хотел бы сделать, это проверить, есть ли у вас файл fixture, который не связан с одним из ваших классов моделей (возможно, вы удалили модель, но забыли удалить прибор?)
Если это не сработает, попробуйте изменить строку в тестовом помощнике, чтобы явно загрузить необходимые вам приборы. Поэтому, если вы хотите загрузить светильники для объекта с именем Post и объекта с именем User, вы измените:
fixtures :all
к
fixtures :posts, :users
в test_helper.rb, и вы увидите, что ошибка исчезла (хотя теперь могут появляться другие ошибки, потому что ваши приборы не загружены.
Я получил эту ошибку, когда ошибся, создав некоторый код эшафота. Я использовал множественное имя модели, и это просто путало загрузку прибора, я думаю. Регенерация эшафота с уникальным именем модели устранила проблему.
В случае, когда класс является нерегулярным классом с точки зрения наименования, такого как fish
, sms
он мог быть создан с помощью флага --force-plural
т.е.
rails g model sms --force-plural
в этом случае вы настроили перегиб, который настроен под
config/initializers/inflections.rb
примером такого является
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
Таким образом, класс может быть распознан, как вы его объявили