django 灯具:在哪里添加灯具文件
Posted
技术标签:
【中文标题】django 灯具:在哪里添加灯具文件【英文标题】:django fixtures: Where to add a fixture file 【发布时间】:2010-11-26 00:33:20 【问题描述】:我正在尝试创建一组测试用例来涵盖我的 django 应用程序。我需要预定义的数据库数据来运行我的一些测试。所以我决定使用固定装置。
我所做的是: 1)创建夹具文件: oleg$ python manage.py dumpdata goserver > fixture1.json 2)将fixture放在应用程序所在的目录中 oleg$ cp fixture1.json goserver/ 3) 在我的应用程序的测试文件中记下纹理名称
class GoserverTestCase(TestCase):
fixtures = ['fixture1.json']
def setUp(self):
pass
def testUserIsAdded(self):
print "Users" , User.objects.all()
#print ActiveList.objects.all()
self.assertEquals(True, True)
4) 使用命令运行文本大小写: oleg$ python manage.py test --verbosity=2 goserver
测试运行的输出是(部分):
尝试 '/Users/oleg/jin/goclub/trunk/jin/../jin/register/fixtures' 对于 xml 夹具 'initial_data'... 否 xml 夹具 'initial_data' 在 '/Users/oleg/jin/goclub/trunk/jin/../jin/register/fixtures'。 试 '/Users/oleg/jin/goclub/trunk/jin/../jin/register/fixtures' 对于 json 夹具 'initial_data'... 否 json夹具'initial_data'在 '/Users/oleg/jin/goclub/trunk/jin/../jin/register/fixtures'。 检查 '/Users/oleg/jin/goclub/trunk/jin/../jin/captcha/fixtures' 对于固定装置...尝试 '/Users/oleg/jin/goclub/trunk/jin/../jin/captcha/fixtures' 对于 xml 夹具 'initial_data'... 否 xml 夹具 'initial_data' 在 '/Users/oleg/jin/goclub/trunk/jin/../jin/captcha/fixtures'。 试 '/Users/oleg/jin/goclub/trunk/jin/../jin/captcha/fixtures' 对于 json 夹具 'initial_data'... 否 json夹具'initial_data'在 '/Users/oleg/jin/goclub/trunk/jin/../jin/captcha/fixtures'。 检查 '/Users/oleg/jin/goclub/trunk/jin/../jin/goserver/fixtures' 对于固定装置...尝试 '/Users/oleg/jin/goclub/trunk/jin/../jin/goserver/fixtures' 对于 xml 夹具 'initial_data'... 否 xml 夹具 'initial_data' 在 '/Users/oleg/jin/goclub/trunk/jin/../jin/goserver/fixtures'。 试 '/Users/oleg/jin/goclub/trunk/jin/../jin/goserver/fixtures' 对于 json 夹具 'initial_data'... 否 json夹具'initial_data'在 '/Users/oleg/jin/goclub/trunk/jin/../jin/goserver/fixtures'。 检查 '/' 是否有固定装置...尝试 '/' 用于 xml 夹具 'initial_data'... “/”中没有 xml 夹具“initial_data”。 为 json 夹具尝试“/” 'initial_data'... 没有 json 夹具 '/'中的'initial_data'。检查'U' 用于固定装置...为 xml 尝试“U” 夹具'initial_data'...没有xml 'U'中的夹具'initial_data'。试 'U' 用于 json 夹具'initial_data'... “U”中没有 json 夹具“initial_data”。 检查 's' 的固定装置...尝试 's' 用于 xml 夹具 'initial_data'... “s”中没有 xml 夹具“initial_data”。 为 json 夹具尝试“s” 'initial_data'..
实际上问题是根本没有找到fixture,所以没有添加我想添加到测试数据库中的数据。你能建议我一个解决问题的方法吗
我尝试了一种新方法。 我只是做了一个完整数据库的转储并将它放到应用程序文件夹中。
但我遇到了一些编码问题。
能否请您检查错误响应:
文件“build/bdist.macosx-10.3-i386/egg/mysqldb/cursors.py”,第 168 行,在执行中 如果不是 self._defer_warnings:self._warning_check() _warning_check 中的文件“build/bdist.macosx-10.3-i386/egg/MySQLdb/cursors.py”,第 82 行 警告(w[-1],self.Warning,3) 文件“/opt/local/lib/python2.5/warnings.py”,第 62 行,在警告中 全局变量) 文件“/opt/local/lib/python2.5/warnings.py”,第 102 行,在 warn_explicit 中 提出讯息 警告:不正确的字符串值:第 1 行的列 'object_repr' 的 '\xD0\x9D\xD0\xB0 \xD0...'
testUserIsAdded (jin.goserver.tests.GoserverTestCase) ... 用户 []
还有一个问题。当我禁用固定装置时,我仍然收到错误:
单元测试代码覆盖率结果
Traceback(最近一次调用最后一次): 文件“manage.py”,第 11 行,在 执行管理器(设置) 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/init.py”,第 340 行,在执行管理器中 实用程序.execute() 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/init.py”,第 295 行,在执行 self.fetch_command(子命令).run_from_argv(self.argv) 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py”,第 192 行,在 run_from_argv self.execute(*args, **options.dict) 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py”,第219行,在执行 输出 = self.handle(*args, **options) 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/commands/test.py”,第 33 行,在句柄中 失败= test_runner(test_labels,详细度=详细度,交互式=交互式) 文件“/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py”,第 58 行,在 run_tests modules.extend(_package_modules(*pkg)) _package_modules 中的文件“/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py”,第 92 行 modules.append(import(impstr + '.' + name, , , [''])) 文件“/Users/oleg/jin/goclub/trunk/jin/goserver/admin.py”,第 11 行,在 admin.site.register(ActiveList, ActiveListAdmin) 文件“/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/contrib/admin/sites.py”,第 64 行,在寄存器中 raise AlreadyRegistered('模型 %s 已经注册' % model.name) django.contrib.admin.sites.AlreadyRegistered: 模型 ActiveList 已经注册
【问题讨论】:
现在对我来说事情变得更复杂了。我导出了整个数据库,现在加载夹具时,我不断收到 IntegrityError: (1062, "Duplicate entry 'goserver-activelist' for key 'app_label'") 不知道为什么会出现错误。我尝试从生产中刷新数据库(以防万一我以某种方式在开发中添加了 2 次应用程序),但错误仍然相同。我还尝试通过夹具文件减少查看重复项,但没有设法获得其中任何一个 其实最后一部分是一个单独的问题 Oleg,您找到解决“重复输入...”问题的方法了吗? 从转储中删除内容类型应用程序 【参考方案1】:关于将夹具文件放在哪里的第一个问题:在每个应用程序中创建一个名为夹具的文件夹,并将夹具数据放在那里。
关于完整性错误的第二个问题,请查看有关内容类型和固定装置问题的讨论:
Problems with contenttypes when loading a fixture in Django
【讨论】:
Django 现在还查看setting.FIXTURE_DIRS
可以方便地手动指向不是您自己创建的应用程序的位置,例如默认用户应用程序。以上是关于django 灯具:在哪里添加灯具文件的主要内容,如果未能解决你的问题,请参考以下文章