【问题标题】:sniffer can't find DJANGO_SETTINGS_MODULE嗅探器找不到 DJANGO_SETTINGS_MODULE
【发布时间】:2012-12-20 15:06:07
【问题描述】:

我正在尝试在开发过程中进行更改后自动重新运行测试。在搜索了一下sniffer 之后似乎还不错。但是,如果我运行它,我的测试会因此错误而失败:

ERROR: Failure: ImportError (Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.)

如果我手动运行它们,它们就会通过。你知道为什么嗅探器不起作用吗?

【问题讨论】:

  • 原因可能与 sniffer runner 不保留用户的环境变量有关。如果您可以添加一些代码行来显示您如何调用测试函数,我们可以提供更多提示

标签: python django tdd automated-tests sniffer


【解决方案1】:

您的scent.py 应该可以使用以下内容:

from subprocess import call
from sniffer.api import runnable

@runnable
def execute_tests(*args):
    fn = [ 'python', 'manage.py', 'test' ]
    fn += args[1:]
    return call(fn) == 0

然后您可以将其称为sniffer -x appName

【讨论】:

    【解决方案2】:

    您可以通过在与manage.py 相同的目录中创建scent.py 文件来让sniffer 读取您的设置。

    这是我的样子:

    import os
    os.environ["DJANGO_SETTINGS_MODULE"] = 'myapp.settings'
    

    这将让您尽可能sniffer 读取您的设置,但随后您会遇到其他问题 - 基本上,sniffer 只是使用 nose 运行您的测试,这与manage.py test 在安装 django-nose 时执行。

    有人知道scent.py 中还需要什么snigger 才能与Django 一起使用吗?

    【讨论】:

      【解决方案3】:

      试图猜测问题可能出在哪里:看来您需要明确设置 settings.py 文件的位置。

      如果您通过subprocess' 调用运行测试,您可以使用以下命令:

      call(["django-admin.py", "test --settings=your_project.settings"])
      

      否则您可以使用以下命令设置环境变量:

      import os
      os.environ['DJANGO_SETTINGS_MODULE'] = 'your_project.settings'
      

      (将 your_project 更改为您的 django 项目的名称)

      如果您正在运行“./manage.py tests”之类的命令,您可以在 manage.py 开头添加前几行(还有其他方法,但我需要查看代码以提供更精确的解决方案)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-20
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多