我正在编写一个Django可重用的应用程序。它不是一个可以单独使用的常用应用程序。它需要其他应用程序可用,就像django.contrib.admin或django-dajaxice那样。
我当前的项目树如下所示:
django-myapp/
docs/
some.rst
docs.rst
...
myapp/
static/
myapp/
some_js_stuff.js
templatetags/
some_file.py
__init__.py
base.py
manager.py
...
unit_tests/
__init__.py
test_base.py
test_manager.py
functional_tests/
__init__.py
functional_tests.py
urls.py
README.rst
LICENSE
requirements.txt
requirements-test.txt
setup.py
...
单元测试很简单 - 我只是测试我的代码所以我不需要完整的Django环境来运行它们。简单./setup.py test
效果很好。
功能测试是棘手的部分。我想使用selenium所以我需要运行dev服务器,这需要整个Django环境。我正在尝试使用django.test.LiveServerTestCase
,但没有成功(看起来没有定义网址,在ROOT_URLCONF
中设置settings
而课堂上的urls
属性没有帮助)。
我发现的每一篇文档,stackoverflow上的每个问题都讲述了在Django项目中测试Django应用程序。这是我的问题:在没有设置完整的Django项目的情况下,运行可重用应用程序的功能/集成测试的最佳(和工作)方法是什么?
答案 0 :(得分:3)
作为Nathan says,很难在没有堆栈的情况下测试整个堆栈中的单元。所以你必须有一个设置文件。看看优秀的django-debug-toolbar应用程序是如何做到的:
它有Makefile个test_selenium
规则:
test_selenium:
DJANGO_SELENIUM_TESTS=true DJANGO_SETTINGS_MODULE=tests.settings \
django-admin.py test tests
在其tests模块中,它有一个简单的settings.py基本必需品:
INSTALLED_APPS
正在测试的应用ROOT_URLCONF
指向urls.py MIDDLEWARE_CLASSES
之类的东西可能因为你没有而跳过。@skipUnless('DJANGO_SELENIUM_TESTS' in os.environ, "selenium tests not requested")
class DebugToolbarLiveTestCase(LiveServerTestCase):
...
研究他们的设置。从Makefile开始,深入挖掘,确保你理解为什么一切都在那里。
我喜欢这种设置,因为集成/功能测试往往是doglow。可以理解的是,他们用所有移动部件测试整个堆栈。他们的Makefile提供了一种简单的方法来跳过它们。如果我有一个使用Javascript的可重用应用程序,我也会查看jasmine。或者一些other tool来测试javascript。因为运行缓慢的集成仅仅是为了查看js单元是否有效。