Похоже, что это сообщение было сделано некоторое время назад, хотя для меня это были лучшие результаты, так что вот мои выводы.
Lettuce имеет декораторы @before.runserver
и @after.runserver
для Django, которые можно использовать для реализации тестовой базы данных в вашем файле terrain.py.
Я использую базу данных SQLite для этого примера и также использую South [:(], поэтому у меня есть дополнительный тест, чтобы убедиться, что SOUTH_TESTS_MIGRATE
был установлен на False
. У меня есть файл local_settings_test.py, который переопределяет настройки с настройками, характерными для моего тестового примера, и вызывает команду урожай как:
python manage.py harvest --settings=local_settings_test
Вот мои звонки о настройке и уничтожении. Конечно, вы можете реализовать их с другими декораторами, если вы предпочитаете сбрасывать базу данных, например, при каждой функции, сценарии или шаге. Обратитесь к http://lettuce.it/reference/terrain.html для получения дополнительной информации о том, что доступно для вас.
from lettuce import *
from django.conf import settings
from django.core.management.base import CommandError
from django.core.management import call_command
def assert_test_database():
"""
Raises a CommandError in the event that the database name does not contain
any reference to testing.
Also checks South settings to ensure migrations are not implemented.
"""
if not '-test' in settings.DATABASES['default']['NAME']:
raise CommandError('You must run harvest with a test database')
if getattr(settings, 'SOUTH_TESTS_MIGRATE', True):
raise CommandError('SOUTH_TESTS_MIGRATE should be set to False')
@before.runserver
def create_database(server):
"""
Asserts the database name is correct and creates initial structure, loading
in any test_data fixtures which may have been created.
"""
assert_test_database()
call_command('syncdb', interactive=False, verbosity=0)
call_command('loaddata', 'test_data', interactive=False, verbosity=0)
@after.runserver
def flush_database(server):
"""
Asserts the database name is correct and flushes the database.
"""
assert_test_database()
call_command('flush', interactive=False, verbosity=0)
После того, как вы добавили эти шаги в свой файл ландшафта, вы можете вызывать модели на своих шагах, как при тестировании модулей.