Как сделать `manage.py` поисковыми тестами также в подпапке` tests`, а не только в каталоге верхнего уровня приложения? - PullRequest
0 голосов
/ 28 сентября 2019

Это моя структура каталогов:

~
|--- scratchpad
     |--- manage.py
     |--- my_project
          |--- __init__.py
          |--- settings.py
          |--- urls.py
          |--- wsgi.py
          |--- my_app
               |--- __init__.py
               |--- admin.py
               |--- apps.py
               |--- models.py
               |--- tests.py
               |--- views.py
               |--- migrations
                    |--- __init__.py

Содержимое tests.py достаточно простое:

from django.test import TestCase

# Create your tests here.

class TrivialTestCase(TestCase):
    def test_trivial(self):
        self.assertTrue(True)

В этом режиме я могу без проблем запускать свои тесты:

m@mycomp:~/scratchpad$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

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

НО, что если файл tests.py станет настолько большим, что я хотел бы разбить его на множество более мелких файлов и переместить их все в отдельную папку, чтобы сохранить каталог приложения в чистоте?

~
|--- scratchpad
     |--- manage.py
     |--- my_project
          |--- __init__.py
          |--- settings.py
          |--- urls.py
          |--- wsgi.py
          |--- my_app
               |--- __init__.py
               |--- admin.py
               |--- apps.py
               |--- models.py
               |--- tests
                    |--- tests_trivial.py
               |--- views.py
               |--- migrations
                    |--- __init__.py

Теперь manage.py не могу найти мои тесты!

m@mycomp:~/scratchpad$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).

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

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

Я удивлен, потому что это поведение, кажется, противоречит определенным высоко голосуемым ответам здесь , по крайней мере, если я читаю этиотвечает правильно.

Теперь я могу запустить свои тесты, если я немного изменю свою команду:

m@m-X555LJ:~/scratchpad$ python3 manage.py test my_project.my_app.tests
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

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

Однако вводить все это каждый раз, когда я хочу выполнять тесты, - это PITA.

Есть ли способ сделать manage.py обнаружение тестов в подпапке tests без необходимости постоянно вводить my_project.my_app.tests?

1 Ответ

0 голосов
/ 28 сентября 2019

Для каждой тестовой папки django-app требуется следующая структура:

|__django-app
    |__tests
        |-- __init__.py
        |-- test_models.py   
        |-- test_views.py   

Внимание! Заполните пустой файл __ init __. Py в каждом тесте.-directory.

Итак, в вашем случае это должно быть:

|--- scratchpad
     |--- manage.py
     |--- my_project
          |--- __init__.py
          |--- settings.py
          |--- urls.py
          |--- wsgi.py
          |--- my_app
               |--- __init__.py
               |--- admin.py
               |--- apps.py
               |--- models.py
               |--- tests
                    |--- __init__.py
                    |--- tests_trivial.py
               |--- views.py
               |--- migrations
                    |--- __init__.py

Я настоятельно рекомендую этот урок Уильяма Винсента для начала тестирования с Django Django Testing Tutorial

...