web-dev-qa-db-ja.com

Djangoチュートリアルテストが失敗する-polls.testsという名前のモジュールはありません

Django 1.6チュートリアルで遊んでいますが、テストを実行できません。私のプロジェクト(mydjangoという名前)とアプリ構造(名前はpolls)は、virtualenv。(.njaファイルは私が使用しているidea ide忍者-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=の動作を理解するためにチュートリアルに従いましたが、テスト部分にこだわっています。チュートリアルでtest.pyという名前のファイルをappフォルダーに作成しました。

# -*- 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',
)

私は何を間違えていますか?

54
bre

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はルートディレクトリの名前です(プロジェクトのコンテナ)。

(manage.pyファイルと同じレベルで)mydjangoディレクトリの__init__.pyファイルを削除することにより、この問題を修正しました。このディレクトリは、pythonモジュールであると想定されていません。その場合、Djangoのテストランナーが混乱するようです。

したがって、_init_。pyファイルを削除するだけで問題を解決できます

$ rm mydjango/__init__.py
170
pchiquet

同じ問題を抱えている他の人にとって、これが起こる別の理由は、ルートフォルダーとプロジェクトフォルダーに同じ名前がある場合です。

例えば:

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
11
buluba89

最初の答えはうまくいきませんでした。私はwin8を使用して、これが理由かもしれません。ターミナルでdirを./pollsに変更して実行します

python ../manage.py test polls
0
mazdack

とにかくランニング

$ python manage.py test polls.tests

それは動作します、今私にとっては十分です:

Creating test database for alias 'default'...
F
======================================================================
FAIL: test_was_published_recently_with_future_poll (polls.tests.QuestionMethodTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/sergio/.virtualenvs/Django4/mydjango/polls/tests.py", line 17, in test_was_published_recently_with_future_poll
    self.assertEqual(future_question.was_published_recently(), False)
AssertionError: True != False
0
bre