2012-09-13 31 views
3

我手边有一个奇怪的问题。Django Package tests not found

我正在创建一个django包,并且想为它提供一些测试用例。

该软件包名为ajax_forms,完整路径是我的PYTHONPATH的一部分。 此目录还包含tests目录(包含__ 初始 __ .py文件)tests.py文件(包含测试)和urls.py文件。

现在我想运行测试。

ajax_forms父目录在INSTALLED_APPS中有一个带有ajax_forms的示例项目设置。

但我似乎无法让测试运行:

>> ./manage.py test ajax_forms 
Creating test database for alias 'default'... 

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 
Destroying test database for alias 'default'... 

没有测试发现,所以我尝试更加具体:

>> ./manage.py test ajax_forms.tests 
.... 
raise ValueError("Test label '%s' does not refer to a test" % label) 
ValueError: Test label 'ajax_forms.tests' does not refer to a test 
(ajax-validation) 

即使./manage.py ajax_forms。 tests.tests.AjaxFormViewTest将无法找到测试并提供与上述相同的错误。

但试图从./manage.py外壳导入测试用例工作正常

In [2]: from ajax_forms.tests.tests import AjaxFormViewTest 

我有点无能在这里,这是怎么回事。

+0

测试包中的文件是否真的叫**'init.py' **?而不是'__init __。py'? –

+0

对不起,应该是_init_____.py而不是init.py.所以我认为没有问题。 –

+0

你又做了一次:)使用反引号(\'\')来标记代码片段或文件名,然后它们不会被损坏 –

回答

5

你需要把from tests import *__init__.py文件

Django会看在你的应用程序名为测试封装/模块,然后询问其命名为测试用例。在这种情况下,它将查看测试包的名称空间(来自init .py文件),并在那里发现任何内容。通过在__init__.py文件中进行导入,您将从测试模块导入测试用例到测试包的名称空间中,django将能够找到它们并运行它们。

+0

当然,如果你只有一个文件在tests目录中,那没有意义在所有的目录中:只需将tests.py文件移动到上面的级别即可。 –

2

这个问题的另一个解决方案是使用更多的智能测试跑步者。你可以试试nosedjango_nose - 它会在这种情况下发现测试。如果您不想安装附加应用程序,@Ctrlspc解决方案是解决此问题的唯一方法。

+1

我刚开始使用django-nose,我也可以推荐这种方法,我喜欢这个事实,你可以很容易地获得融合和其他鼻子的好东西,但烤成django! – Ctrlspc

0

你可以添加一个models.py文件中的内部应用程序,新的应用程序添加到已安装的应用程序和Django会找到tests.py文件,而无需任何添加到__init__.py

我猜都@Ctrlspc的方法,这是一种肮脏。所以任何选择都OK