【发布时间】:2015-06-22 01:21:19
【问题描述】:
我有一个非常标准的 Django 测试用例设置(我认为)
api-name
manage.py
api-name
__init__.py
settings.py
wsgi.py
v0
project
stuff.py
tests
test_stuff.py
manage.py
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api-name.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
wsgi.py
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api-name.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
test_stuff.py
from django.test import TestCase
from v0.project.stuff import *
class ProjectTestCase(TestCase):
def setUp(self):
# set stuff up
def test_project_stuff(self):
# test stuff
def test_other_stuff(self):
# test stuff
执行测试时会发生以下情况:
[cwilbur api-name]$ ./manage.py test
Creating test database for alias 'default'...
..
----------------------------------------------------------------------
Ran 2 tests in 0.014s
OK
Destroying test database for alias 'default'...
[cwilbur api-name]$ cd ..
[cwilbur source]$ ./api-name/manage.py test
Creating test database for alias 'default'...
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Destroying test database for alias 'default'...
这是(测试从项目的根目录运行,而不是从其他地方运行)预期的行为吗?有没有办法改变事情以使其正常工作(我想从不同目录中的预提交挂钩执行我的测试)?
我尝试从this answer 添加from tests import *,但没有帮助。我还尝试将 sys.path.append 行从 wsgi.py 移动到 manage.py,但这也没有帮助。
我可以尝试其他任何想法吗?
【问题讨论】:
-
您可以将
cd命令添加到您的预提交挂钩中。 -
@dizballanze 这有一个缺点,我必须在命令末尾和任何干预退出之前添加另一个 cd 才能回到我开始的位置并且没有副作用。不要误会,如果没有别的办法,我就去做。
-
如果你使用 bash,你可以尝试在 subshell 中运行 manage.py,如下所示:
(cd /somedir; ./manage.py test)这不会产生任何副作用。
标签: python django unit-testing