#ruby-on-rails #sqlite #selenium #cucumber #capybara
#ruby-on-rails #sqlite #selenium #cucumber #capybara
Вопрос:
Если я использую cucumber / capybara с веб-драйвером selenium для тестирования, нужно ли мне открывать сервер rails в отдельном терминале перед запуском cucumber?
(В настоящее время я запускаю его с открытым сервером, но получаю ошибки «база данных заблокирована» из sqlite, которые, как я полагаю, являются конфликтом cucumber и webrick)
Ответ №1:
Вам не нужен активный сервер Rails для запуска тестов Cucumber, а наличие работающего сервера (Webrick, Mongrel и т.д.) Не должно влиять на вашу базу данных, если вы не используете одну и ту же базу данных для тестирования и разработки. Наборы тестирования запускают свою собственную копию rails и должны использовать базу данных «AppName-Test» (по умолчанию) для тестирования.
База данных заблокирована, это происходит при первом тестировании или позже при тестировании? Если это позже в тестировании, у вас может быть транзакция lager DB, которая выполняется при переходе к следующему тестированию. Если вы думаете, что это так, введите ‘sleep 30’ в конце первого теста для проверки… дайте БД некоторое время для остывания. Если это исправит проблему, поищите в коде все, что запускает аномально длинные транзакции БД.
Хорошим камнем для расширения тестирования было бы:https://github.com/bmabey/database_cleaner
Это должно помочь устранить любое взаимодействие с DB test. Надеюсь, это поможет вам пойти по правильному пути.
Комментарии:
1. Вы правы, кажется, это работает лучше. Это происходит при первом тестировании; кажется, транзакция не завершится, но это всего лишь пара небольших вставок, поэтому я не должен предполагать, что это займет слишком много времени. Есть ли что-нибудь еще, что может привести к зависанию?
2. я полагаю, сбросьте свою тестовую базу данных
RAILS_ENV=test rake db:reset
… (Если это не тот, сделайтеrake -T
, чтобы просмотреть задачи и найти DB, который выполняет сброс — db: drop и db: setup, возможно, придется запустить). Если новый запуск тестовой базы данных не работает, проверьте вставки в визуальном тесте: запустите сервер rails, выполните то, что делает ваш тест в вашем браузере, затем посмотрите, что, по словам консоли, происходит. Может быть, вы сможете получить представление о зависании там.3. Для всех, кто еще получает эти ошибки, проверьте, что для database cleaner установлено значение усечения для sqlite — кажется, работает лучше.