Django测试无法初始化db但我可以

时间:2013-07-16 10:14:03

标签: database django testing

标题不清楚,我知道。
我想对我的应用程序进行单元测试,所以我编写了一个我想要执行的小测试。我启动了python manage.py test,但数据库中出现错误:

The error was: ERREUR:  the relation « me_auth_emailuser » doesn't exists

Error in migration: authtoken:0001_initial
DatabaseError: ERREUR:  the relation « me_auth_emailuser » doesn't exists

(翻译自法语)
此表已使用南方迁移。对于我的应用程序,我只使用:

python manage.py syncdb
python manage.py migrate me_auth
python manage.py migrate

我不明白发生了什么,因为使用这些命令我没有得到任何错误......有人可以帮助我吗? :)

1 个答案:

答案 0 :(得分:2)

据推测,在某些时候你有一个me_auth_email_user的关系,你不再拥有。我想如果你要创建一个新的数据库,你会得到同样的错误,然后运行:

python manage.py syncdb
python manage.py migrate

有两种解决方案:

  1. 请勿在单元测试中使用South(如果您正在测试,请将其从INSTALLED_APPS中删除,如下所示,或者在settings.py中设置SOUTH_TESTS_MIGRATE = False)。
  2. 手动修复损坏的迁移。
  3. 在测试期间移除南方的一种快速而苛刻的方法是在settings.py下面的正常INSTALLED_APPS设置下面显示类似的内容:

    import sys
    
    if 'test' in sys.argv:
      INSTALLED_APPS = [app for app in INSTALLED_APPS if app != 'south']
    

    通常,测试迁移是一件好事 - 您应始终能够创建新数据库并运行migrate - 所以我强烈建议您考虑选项(2)。