为什么Nose看不到我的环境变量?
我刚开始使用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