未找到Django Package测试

时间:2012-09-13 18:56:56

标签: python django unit-testing

我手头有一个奇怪的问题。

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

该包名为ajax_forms,完整路径是我的PYTHONPATH的一部分。 该目录还包含一个tests目录(带有 __ init __ .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 shell导入测试用例可以正常工作

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

我在这里有点无能为力。

3 个答案:

答案 0 :(得分:5)

您需要将from tests import *放入__init__.py文件

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您可以在应用内添加models.py文件,将新应用添加到已安装的应用中,django将找到tests.py文件,而无需向__init__.py添加任何内容。

我想两个都是@Ctrlspc的方法而且这个很脏。所以任何选择都可以