运行django教程测试失败 - 没有名为polls.tests的模块

 化妆造型师艾米 发布于 2023-02-04 13:30

我正在玩django 1.6教程,但我无法运行测试.我的项目(名称mydjango)和应用程序结构(名称是民意调查)如下所示在virtualenv中.(.nja文件只是由我正在使用的ninja-ide创建的)

.
??? __init__.py
??? manage.py
??? mydjango
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? mydjango.nja
?   ??? settings.py
?   ??? settings.pyc
?   ??? templates
?   ?   ??? admin
?   ?       ??? base_site.html
?   ??? urls.py
?   ??? urls.pyc
?   ??? wsgi.py
?   ??? wsgi.pyc
??? polls
?   ??? admin.py
?   ??? admin.pyc
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? models.py
?   ??? models.pyc
?   ??? templates
?   ?   ??? __init__.py
?   ?   ??? polls
?   ?       ??? detail.html
?   ?       ??? index.html
?   ?       ??? __init__.py
?   ?       ??? results.html
?   ??? tests.py
?   ??? tests.pyc
?   ??? urls.py
?   ??? urls.pyc
?   ??? views.py
?   ??? views.pyc
??? polls.nja

我按照教程了解django是如何工作的,但我陷入了测试部分.正如教程建议我在app文件夹中创建了一个名为tests.py的文件,非常简单的文件是:

# -*- coding: utf-8 -*-
from django.test import TestCase
import datetime
from django.utils import timezone
from polls.models import Question

# Create your tests here.l  
class QuestionMethodTests(TestCase):

    def test_was_published_recently_with_future_poll(self):
        """
        was_published_recently dovrebbe ritornare falso se si mette una data nel futuro
        """
        future_question = Question(pub_date=timezone.now() + datetime.timedelta(hours=50))
        self.assertEqual(future_question.was_published_recently(), False)

然后我将unittest2安装到virtualenv中

$pip install unittest2

并运行

$python manage.py test polls
Creating test database for alias 'default'...
E
======================================================================
ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: mydjango.polls.tests
Traceback (most recent call last):
  File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests
    module = self._get_module_from_name(name)
  File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name
    __import__(name)
ImportError: No module named polls.tests


----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)
Destroying test database for alias 'default'...

没有办法让测试工作,如果不传递应用程序名称,它返回相同的错误:

$ python manage.py test
Creating test database for alias 'default'...
E
======================================================================
ERROR: mydjango.polls.tests (unittest2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: mydjango.polls.tests
Traceback (most recent call last):
  File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 260, in _find_tests
    module = self._get_module_from_name(name)
  File "/home/sergio/.virtualenvs/django4/local/lib/python2.7/site-packages/unittest2/loader.py", line 238, in _get_module_from_name
    __import__(name)
ImportError: No module named polls.tests


----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)
Destroying test database for alias 'default'...

我的INSTALLED_APPS是:

INSTALLED_APPS = (
    'south',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
)

我究竟做错了什么?

2 个回答
  • 对于其他具有相同问题的人来说,另一个原因是如果您对根文件夹和项目文件夹具有相同的名称.

    例如:

    mydjango
    ??? __init__.py
    ??? manage.py
    ??? mydjango
    ?   ??? __init__.py
    ?   ??? settings.py
    ?   ??? urls.py
    ?   ??? wsgi.py
    ??? polls
    ?   ??? admin.py
    ?   ??? __init__.py
    ?   ??? models.py
    |   ??? tests.py
    ?   ??? templates
    

    赛跑 ./manage.py test

    抛出错误没有名为polls.tests的模块

    修复它只需将根文件夹重命名为其他类似:

    mydjango_project
    ??? __init__.py
    ??? manage.py
    ??? mydjango
    ?   ??? __init__.py
    ?   ??? settings.py
    ?   ??? urls.py
    ?   ??? wsgi.py
    ??? polls
    ?   ??? admin.py
    ?   ??? __init__.py
    ?   ??? models.py
    |   ??? tests.py
    ?   ??? templates
    

    2023-02-04 13:32 回答
  • 我的Django项目遇到了完全相同的问题:

    $ python manage test polls.tests
    

    工作正常,而以下失败导致导入错误:

    $ python manage test polls
    $ python manage test
    (...)
    ImportError: Failed to import test module: mydjango.polls.tests
    Traceback (most recent call last):
    (...)
    ImportError: No module named polls.tests
    

    仔细检查错误消息:Django的测试运行器尝试从mydjango.polls.tests导入测试,其中mydjango是根目录的名称(项目的容器).

    我通过删除mydjango目录中的__init__.py文件(与manage.py文件处于同一级别)来解决此问题.这个目录不应该是一个python模块,如果是这样的话,它似乎搞乱了Django的测试运行器.

    所以只需删除_ init _.py文件就可以解决我们的问题:

    $ rm mydjango/__init__.py
    

    2023-02-04 13:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有