为什么Nose看不到我的环境变量?

1 投票
2 回答
1987 浏览
提问于 2025-04-15 19:07

我刚开始使用Nose和Nosetests进行测试,但我的测试失败了,因为Nose看不到环境变量。

目前遇到的错误是:
AttributeError: 'Settings'对象没有'DJANGO_SETTINGS_MODULE'这个属性

我通过从.bash_profile中导出DJANGO_SETTINGS_MODULE来解决了这个问题。

export DJANGO_SETTINGS_MODULE="settings"

现在我看到的错误是:
AttributeError: 'Settings'对象没有'DATABASE_SUPPORTS_TRANSACTIONS'这个属性

为什么iPython和Django的网络服务器能看到这些环境变量,而Nose却看不到呢?

2 个回答

1

看起来,nose这个工具在运行时没有调用create_test_db()这个方法,具体是在django/db/backends/creation.py这个文件里,所以你才会看到这个错误。你可以把它设置为None,或者自己手动调用这个方法。不太确定在最近的Django版本中这个问题是否已经修复。

2

正如Alok所说,Nose并不会从django.db.backends.creation里调用BaseDatabaseCreation.create_test_db('None'),所以你需要手动设置这个选项。

我尝试过,但没有成功。

不过,我发现了NoseDjango。

你可以通过以下命令安装NoseDjango:

easy_install django-nose  

因为django-nose是对Django自带测试命令的扩展,所以你需要在settings.py文件的INSTALLED_APPS里添加它:

INSTALLED_APPS = (
...
'django_nose',
...
)

然后在settings.py里设置TEST_RUNNER:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

一旦NoseDjango设置完成,你就可以通过以下命令运行你的Nose测试:

manage.py test

撰写回答