Ответ 1
Оказывается, я ошибался. Я не тестировал то, что, как я думал, тестировалось... Поскольку Heroku Routing Mesh отправляла запросы на разные серверы, LiveServerTestCase запускал веб-сервер на одной машине, а Selenium полностью подключался к другим машинам.
Обновляя файл Heroku Procfile:
web: python src/manage.py test --liveserver=0.0.0.0:$PORT
переопределяя параметр DATABASES
, чтобы указать на тестовую базу данных, а также настроить бегун набора тестов, связанный ниже (та же идея все еще имеет место: переопределить setup_databases
, чтобы он только уменьшал/воссоздавал таблицы, а не весь базы данных), я смог запустить удаленные тесты. Но это еще более хаки/больно/неэффективно. Все еще ищете что-то лучшее! Извините за путаницу.
(обновленный ответ ниже)
Вот шаги, которые мне помогли:
- Создайте дополнительную бесплатную базу данных Postgres, используя инструментальную панель Heroku.
heroku addons:add heroku-postgresql:dev
- Используйте класс HerokuTestSuiteRunner, который вы найдете здесь.
Этот пользовательский тестовый бегун требует, чтобы вы определили параметр TEST_DATABASES
, который следует за типичным форматом DATABASES
. Например:
TEST_DATABASES = {
'default': dj_database_url.config(env='TEST_DATABASE_URL')
}
Затем установите параметр TEST_RUNNER
как путь к Python, где можно найти HerokuTestSuiteRunner.
Теперь вы можете запускать тесты Django на Heroku с использованием данной базы данных. Это очень быстрый взлом... Позвольте мне знать, как его можно улучшить/сделать менее хаки. Наслаждайтесь!
(исходный ответ ниже)
Несколько соответствующих решений обсуждались здесь . Как вы можете прочитать в Django docs, "[w] используя механизм базы данных SQLite, тесты по умолчанию будут использовать встроенную память базы данных".
Хотя это не полностью проверяет механизм базы данных, который вы используете на Heroku (я все еще ищут решение, которое это делает), установка механизма базы данных SQLite позволит по крайней мере разрешить вам выполнять ваши тесты.
См. приведенный выше StackOverflow question для некоторых указателей. Есть как минимум два пути: тестирование if 'test' in sys.argv
перед тем, как заставить SQLite работать в качестве механизма базы данных или иметь специальный файл настроек, используемый при тестировании, который затем можно передать в django manage.py test
с помощью параметра --settings
.