Django 1.8 — Как проверить определенный файл в папке с тестами?

Это мой каталог:

CMSApp/tests/test_page.py
CMSApp/tests/test_user.py
CMSApp/models.py
CMSApp/views.py

Я хочу протестировать только test_page.py. Я могу сделать это:

python manage.py test CMSApp/tests

Но это проверит как test_page.py, так и test_user.py. Когда я пытаюсь

python manage.py test CMSApp/tests/test_page

В нем говорится:

No module named CMSApp/tests/test_page

И когда я пытаюсь:

python manage.py test CMSApp/tests/test_page.py там написано NoneType object is not iterable.


person SilentDev    schedule 27.10.2015    source источник
comment
что вы получите, если попробуете без расширения .py для test_page в конце?   -  person drabo2005    schedule 28.10.2015
comment
@drabo2005 Там написано No module named CMSApp/tests/test_page.   -  person SilentDev    schedule 28.10.2015
comment
я думаю, что проблема может быть в названии папки «тесты», потому что вы можете протестировать, выполнив: python manage.py test CMSAPP.‹other_folder›.test_page.tests последние «тесты» — это встроенная функция, которая может сбить с толку с именем вашей папки: тесты   -  person drabo2005    schedule 28.10.2015
comment
@drabo2005 tests — рекомендуемое имя тестового модуля. См. docs.djangoproject.com/en/1.8/topics/ тестирование/обзор/   -  person Reto Aebersold    schedule 28.10.2015


Ответы (3)


python manage.py test CMSApp.tests.test_page

Вам нужно иметь __init__.py в каталоге tests, чтобы сделать его модулем.

person Shang Wang    schedule 27.10.2015

python manage.py test tests.main.testMainPage.MainPageTests

Там, где тесты и основной являются папками и должны иметь файл init.py, testMainPage — это файл внутри основного, а MainPageTests — это класс этого файла.

в виде дерева:

tests
├── __init__.py
├── main
│   ├── __init__.py
│   ├── testMainPage.py

Класс MainPageTests будет содержать все ваши примеры тестов:

class MainPageTests(TestCase):
    def test_my_view(self):
    pass
person Jean Guzman    schedule 27.10.2015
comment
В моей файловой структуре нет папки main внутри tests. Как я могу выполнить задачу без папки main внутри tests? - person SilentDev; 28.10.2015
comment
@user2719875 user2719875 да, это возможно, вы запустите тесты python manage.py test.testMainPage.MainPageTests - person Jean Guzman; 28.10.2015
comment
Работает ли это для вас? Когда я делаю python manage.py test tests.test_user.UserTests, выдает ошибку AttributeError: 'module' object has no attribute 'test_user'. - person SilentDev; 28.10.2015

Существует несколько способов запуска только определенных тестов, таких как объяснено в документации.

# Run all the tests in the animals.tests module
$ ./manage.py test animals.tests

# Run all the tests found within the 'animals' package
$ ./manage.py test animals

# Run just one test case
$ ./manage.py test animals.tests.AnimalTestCase

# Run just one test method
$ ./manage.py test animals.tests.AnimalTestCase.test_animals_can_speak

# You can also provide a path to a directory to discover tests below that directory:

$ ./manage.py test animals/

# You can specify a custom filename pattern match using the -p (or --pattern)
# option, if your test files are named differently from the test*.py pattern:

$ ./manage.py test --pattern="tests_*.py"

Я нашел особенно удобным использование параметра --pattern, где вы могли просто указать уникальную часть имени тестового файла. Например, в вашей ситуации вы можете просто написать:

python manage.py test --pattern "*test_page*"

Таким образом, вам даже не нужно искать весь путь к вашему тестовому файлу.

person Dany    schedule 09.03.2019