Lettuce 似乎是一个非常好的 Django 应用程序 BDD 测试框架;但是,我还没有找到任何如何使用它测试模型的示例或文档。有什么可用的吗?
2 回答
好吧,我一直在寻找相同的东西,但找不到任何合适的文档或教程。只是为了测试模型的验证并检查关系的健全性,我尝试从场景中放置和获取值并验证它们。我猜这就是从模型中验证所需的大部分验证。
似乎这篇文章是不久前发表的,尽管它对我来说是最重要的结果,所以这是我的发现。
Lettuce 具有Django@before.runserver
的@after.runserver
装饰器,可用于在您的 terrain.py 文件中实现测试数据库。
我在此示例中使用 SQLite 数据库,并且还使用 South [:(] 所以我有一个额外的测试以确保SOUTH_TESTS_MIGRATE
已设置为False
。我有一个 local_settings_test.py 文件,它用我的测试特定的设置覆盖设置case 并使用 Harvest 命令调用,如下所示:
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)
在地形文件中添加这些步骤后,您可以像在单元测试中一样在步骤中调用模型。