2010-05-26 2 views
0

Есть ли способ изменить среду Rails в середине теста? Или, альтернативно, какой был бы правильный способ создания тестового набора, который может запускать Rails в одной среде, запустить первую половину моего теста в нем, а затем перезапустить Rails в другой среде, чтобы закончить тест? В обеих средах есть отдельные базы данных.Проверка рельсов в разных средах

Некоторый необходимый контекст: я пишу плагин Rails, который позволяет нескольким установкам приложения Rails взаимодействовать друг с другом с помощью пользователя, так что пользователь, не имеющий доступа к Интернету, все еще может использовать приложение. Они будут запускать локальную версию приложения и загружать свою работу в онлайн-приложение, сохраняя файл в thumbdrive и перенося его в интернет-кафе.

Плагин добавляет две специальные среды в Rails: «offline-production» и «offline-test». Я хочу написать функциональные тесты, которые включают в себя как «тестовые», так и «автономные» среды, для представления основной онлайн-версии приложения и локальной автономной версии приложения соответственно.

Редактировать: Я читал на стойке :: Тест, и похоже, что это может быть путь, потому что он помещает тестовую платформу за пределы самих рельсов. Но я до сих пор не знаю, как я могу использовать его для тестирования, в котором задействовано несколько окружений. Любые идеи, кто-нибудь?

ответ

1

Возможно, подумайте о проблеме с точки зрения наличия более одного соединения db, вместо того, чтобы иметь более одной среды? Вы не можете переключать среднюю часть пути, по крайней мере, без большого взлома и взлома. :)

http://anandmuranal.wordpress.com/2007/08/23/multiple-database-connection-in-rails/

+0

Хм, так что я могу назвать establish_connection снова изменить, какая база данных используется в настоящее время моделью? Это большая часть того, что мне нужно, но не совсем все: существует определенное поведение среды, которое я тестирую (т. Е. Онлайн-приложение разрешено читать, но не изменять данные, созданные из автономного приложения, и наоборот). Хотя, я полагаю, я могу заглушить метод проверки окружения, чтобы сделать это; это будет нормально работать. Большое спасибо! :-) На самом деле, так как я задал этот вопрос, я закончил работу по-другому: я использую fork в своем Rakefile для запуска отдельных сред Rails. – DSimon

+0

Вы можете заглушить Rails.env.development? как Rails.env.stub! (: development?). and_return (true) Я полагаю. Однако это не похоже на лучшую практику. Вместо того, чтобы ваш код зависел от среды, вы можете зависеть от настроек, которые настраивает ваша среда, которые намного легче изменить для тестирования. –

+0

Это отличная идея, спасибо. – DSimon

Смежные вопросы