Выполнить тесты Rails без удаления тестовой базы данных - PullRequest
7 голосов
/ 22 сентября 2010

Просто интересно, есть ли способ запустить тесты Rails без удаления базы данных.В настоящее время я только выполняю модульные тесты и использую для этого следующую команду rake: rake test:units.

Спасибо за помощь заранее!

На всякий случай, если это уместно:

  • Rails 3
  • Ruby 1.8.7 (MRI)
  • База данных Oracle 11g
    • activerecord-oracle_enhanced-adapter

Ответы [ 6 ]

2 голосов
/ 24 мая 2018

Для Rails 5.2 это поведение можно изменить, установив maintain_test_schema в false в test/test_helper.rb перед импортом rails/test_help:

ActiveRecord::Base.maintain_test_schema = false
require "rails/test_help"

rails/test_help проверит значение maintain_test_schema врешить, нужно ли удалять / создавать / переносить тестовую базу данных или нет.

2 голосов
/ 14 октября 2016

В Rails 5 (и, возможно, более ранних версиях), просто закомментируйте следующую строку в spec/rails_helper.rb:

 ActiveRecord::Migration.maintain_test_schema!

Это предотвратит попытки rake test или rspec отменить тестDB.Вам также нужно будет выполнить миграцию вручную.

2 голосов
/ 20 мая 2013

Это довольно старая публикация, в которой выполняется непропорциональное исправление основных задач очистки / загрузки: http://www.pervasivecode.com/blog/2007/09/22/making-rails-raketest-not-drop-your-pgsql-database/

2 голосов
/ 03 октября 2010

Проведя некоторое исследование, я обнаружил, что не существует способа сделать это.Задачи тестовых граблей всегда отбрасывают базу данных, даже если указана опция TEST=, как предполагает Богдан.

Используя опцию --trace, это можетбыть доказанным.Вот вывод:

$ rake test:units TEST=test/unit/post_test.rb --trace
(in /Users/johnnyicon/Development/ror/test-app)
** Invoke test:units (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment 
** Execute db:schema:load
** Execute test:prepare
** Execute test:units

Прочитав Руководства по Ruby on Rails для тестирования , он описывает, что означают некоторые из этих задач по рейку.Особое внимание следует обратить на задачу db:test:load, которую вы видите в 7-й строке в нижней части вывода как ** Execute db:test:load.В руководствах сказано следующее об этой задаче:

Воссоздать базу данных тестов из текущей схемы.как предполагает Богдан, задача rake по-прежнему воссоздает базу данных.Не тот ответ, на который я надеялся, но это больше не проблема.

Причина, по которой я просил начать, заключалась в том, что у меня не было доступа к другой базе данных, которую можно использовать для тестирования, поэтому я также использовал свою базу данных разработки для тестирования.Но с тех пор я смог получить еще одну базу данных, предназначенную для тестирования.

Спасибо, Богдан!Я ценю помощь!

1 голос
/ 06 октября 2015

Для тех, кто ищет способ пропустить поведение Rails по умолчанию, попробуйте добавить его в свой Rakefile:

Rake::Task["db:test:prepare"].clear
Rake::Task["db:test:load"].clear
Rake::Task["db:test:purge"].clear
0 голосов
/ 12 ноября 2010

Не могли бы вы написать пользовательскую задачу Rake, в которой обезьяна исправила задачу Rake db: test: load, чтобы ничего не делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...