自定义覆盖测试运行器不会创建数据库

时间:2013-07-18 14:49:29

标签: database django unit-testing

我正在使用Django创建一个Rest应用程序 我正在进行单元测试我的应用程序,而不是做coverage source=="." manage.py test myapp --settings="mycustomsettings"我决定创建一个脚本,可以启动我的测试并使用自定义配置文件和覆盖结果运行它们。 这是我的树:

|-- apps
|   |-- __init__.py
|   |-- me_api
|   |-- me_auth
|   |-- me_core
|   |-- me_import
|   `-- me_payment
|-- manage.py
|-- settings.py
|-- settings.pyc
|-- tests
|   |-- coveragerunner.py
|   |-- geodjango.db
|   |-- __init__.py
|   |-- local_settings.py
|   `-- settings.py
|-- urls.py
`-- urls.pyc

我想测试应用/文件夹中的应用。 这是我的代码(在tests / coveragerunner.py中)

import os
import sys
from coverage import coverage

sys.path.append(os.path.join(os.path.dirname(__file__), "../"))
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'

def main():
    """
    Run tests and generates a coverage report.
    """
    cov = coverage()
    cov.erase()
    cov.start()

    from django.conf import settings
    from django.test.utils import get_runner

    TestRunner = get_runner(settings)
    test_runner = TestRunner()
    failures = test_runner.run_tests(['me_api'])

    cov.stop()

if __name__ == '__main__':
    main()

我正在使用geodjango.db这是一个空间数据库作为测试的默认数据库。 我的脚本采用django的设置但是当我运行它时,似乎数据库是空的。我没有自己同步数据库。

DatabaseError: no such table: me_auth_emailuser

有没有办法告诉django在运行测试之前同步数据库,或者我做错了什么?感谢。

PS:当我使用manager.py时,数据库没有问题。 (即使使用了spaceite db和不同的设置源)

1 个答案:

答案 0 :(得分:0)

快速而肮脏的解决方案如下:

  1. 将数据库引擎设置为sqlite,也用于非测试。
  2. 创建syncdb以为测试数据库创建模板。
  3. 现在测试应该有效。
  4. 别忘了将数据库引擎设置回postgesql。