0

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

|-- 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

我想测试应用程序/文件夹中的应用程序。这是我的代码(在测试/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 时,数据库没有问题。(即使使用空间数据库和不同的设置源)

4

1 回答 1

0

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

  1. 将数据库引擎设置为 sqlite,也用于非测试。
  2. 制作一个同步数据库来为测试数据库创建一个模板。
  3. 现在测试应该可以工作了。
  4. 不要忘记将数据库引擎设置回 postgesql。
于 2013-07-20T10:10:00.827 回答