【问题标题】:Testing reusable Django apps with Django testrunner使用 Django testrunner 测试可重用的 Django 应用程序
【发布时间】:2012-03-14 20:15:12
【问题描述】:

我想测试一个带有自己的设置模块的小型可重用应用程序。全局(项目)设置在应用程序的设置中访问以支持变量的覆盖,例如

# in <my_app>/settings.py
from django.conf import settings
MY_SETTING_VAR = getattr(settings, 'MY_OVERRIDDEN_VAR', False)

当我使用 manage.py test myapp 运行测试时,我得到以下信息:

ImportError: 无法导入设置,因为环境 变量 DJANGO_SETTINGS_MODULE 未定义。

在这种情况下运行测试的正确方法是什么?

【问题讨论】:

  • 我要发表一个愚蠢的评论,但是,你有没有研究过其他包是如何做到这一点的?

标签: django testing


【解决方案1】:

我不确定,我测试了你发布的内容,它对我有用:

<<< 12:18.25 Fri Feb 24 2012!~/testproject 
<<< jpic@germaine!10019 env
>>> ./manage.py test testapp                   
Creating test database for alias 'default'...
Destroying old test database 'default'...
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Destroying test database for alias 'default'...
<<< 12:18.27 Fri Feb 24 2012!~/testproject 
<<< jpic@germaine!10020 env
>>> cat testapp/tests.py
from django.test import TestCase

from .settings import *

class SomeTestCase(TestCase):
    def testSomething(self):
        self.assertEqual(MY_SETTING_VAR, 'default')
<<< 12:18.30 Fri Feb 24 2012!~/testproject 
<<< jpic@germaine!10021 env
>>> cat testapp/settings.py
from django.conf import settings
MY_SETTING_VAR = getattr(settings, 'MY_OVERRIDDEN_VAR', 'default')

您要确保您的实际代码与此工作代码匹配。

应用最好包含一个演示应用或至少允许测试的虚拟项目。例如:

<<< 12:42.56 Fri Feb 24 2012!~/testproject/testapp 
<<< jpic@germaine!10034 E:1 env
>>> pip install -e git+git@github.com:subsume/django-subscription.git#egg=sub
Obtaining sub from git+git@github.com:subsume/django-subscription.git#egg=sub
  Cloning git@github.com:subsume/django-subscription.git to /home/jpic/env/src/sub
  Running setup.py egg_info for package sub

Installing collected packages: sub
  Running setup.py develop for sub

    Creating /home/jpic/env/lib/python2.7/site-packages/django-subscription.egg-link (link to .)
    Removing django-subscription 0.0 from easy-install.pth file
    Adding django-subscription 0.1 to easy-install.pth file

    Installed /home/jpic/env/src/sub
Successfully installed sub
Cleaning up...
<<< 12:43.08 Fri Feb 24 2012!~/testproject/testapp 
<<< jpic@germaine!10035 env
<<< 12:43.11 Fri Feb 24 2012!~/testproject/testapp 
<<< jpic@germaine!10035 env
>>> cd ../../env/src/sub
<<< 12:43.15 Fri Feb 24 2012!~/env/src/sub 
<<< jpic@germaine!10036 G:master env
>>> ls
django_subscription.egg-info  docs  README  setup.py  subscription  subscription_test_project
<<< 12:43.16 Fri Feb 24 2012!~/env/src/sub 
<<< jpic@germaine!10037 G:master env
>>> cd subscription_test_project 
<<< 12:43.20 Fri Feb 24 2012!~/env/src/sub/subscription_test_project 
<<< jpic@germaine!10038 G:master env
>>> ./manage.py test subscription
Creating test database for alias 'default'...
........
----------------------------------------------------------------------
Ran 8 tests in 0.012s

OK
Destroying test database for alias 'default'...

【讨论】:

  • 恐怕我在问题中遗漏了一个细节:我没有包含我的应用程序的项目,也许我需要创建一个空的项目并将我的可重用应用程序添加到其中以运行测试?
【解决方案2】:

ImportError:无法导入设置,因为环境变量 DJANGO_SETTINGS_MODULE 未定义。

你得到这个是因为DJANGO_SETTINGS_MODULE不在你的python环境变量中......要解决你的问题,你必须将它定义为

import os
os.environ['DJANGO_SETTINGS_MODULE'] = '<django_application_root>.settings'

您可以将其添加到您的根 __init__.py 文件中...

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 2020-06-26
    • 2014-04-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2010-12-05
    相关资源
    最近更新 更多