#ruby-on-rails #fixtures
#ruby-on-rails #приспособления
Вопрос:
Согласно моим требованиям, я создал модели для запроса внешней базы данных (отличной от той, которую использует приложение rails) для некоторых данных.
Я пытаюсь написать тесты вокруг этих моделей и хочу отделить «образцы тестовых данных» от реальных тестов.
Я думал, что мог бы поместить данные в файл yml и загрузить его в хэш, но это сработало : (
- Добавлен образец тестовых данных в файл с именем приспособления ‘external_database.yml’
- Поместите приведенный ниже код в программу установки, в тестовый файл
ext_data = YAML.load_file(Rails.root.to_s "/test/fixtures/ext_data.yml")
- Но я застрял с приведенной ниже ошибкой
1) Error:
test_should_errorout_for_invalid_market_zip(ExtDBTest):
ActiveRecord::StatementInvalid: Mysql::Error: Table 'rails_app_db.ext_data' doesn't exist: DELETE FROM ext_data
- Каков наилучший способ сделать то, что я хочу сделать?
Ответ №1:
Я предполагаю, что ваша проблема в том, что схема этой внешней базы данных не содержится в вашем файле schema.rb и / или миграциях. Они используются для настройки вашей тестовой базы данных перед запуском тестов.
Итак, предпринята попытка записать эти приспособления в несуществующие таблицы — с результатом, который вы видите выше.
Множественные подключения к базе данных в модульных тестах, как правило, являются проблемой. Рассмотрите возможность создания sqlite-файла для данных внешних зависимостей и настройте свою тестовую среду на использование этого файла — или его копии, на случай, если вам нужно изменить данные.
Комментарии:
1. Спасибо за предложение. Я думаю, что это ведет меня в правильном направлении. Но я не совсем уверен, как заставить мою тестовую среду использовать данные. Кроме того, в моей модели ext_db есть много разных методов, которые извлекают различные данные (и мне придется добавить больше в будущем), поэтому мне было бы проще, если бы я мог легко создавать больше тестовых данных. Именно по этой причине я думал о том, как загрузить файл YAML в хэш.