Нужно ли запускать Webrick перед запуском Cucumber с Selenium?

#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 — кажется, работает лучше.