Подтвердить что ты не робот

Загрузка светильников в блок-тестах django

Я пытаюсь начать писать модульные тесты для django, и у меня есть некоторые вопросы об оснастках:

Я сделал привязку всего проекта db (не определенного приложения), и я хочу загрузить его для каждого теста, потому что похоже, что загрузка только приспособления для определенного приложения будет недостаточной.

Я хотел бы иметь светильник, хранящийся в /proj _folder/fixtures/proj_fixture.json.

Я установил FIXTURE_DIRS = ('/fixtures/',) в свои settings.py. Затем в моем тестовом сценарии я пытаюсь

fixtures = ['proj_fixture.json']

но мои светильники не загружаются. Как это можно решить? Как добавить место для поиска светильников? В общем, нормально ли загружать прибор для всего test_db для каждого теста в каждом приложении (если он довольно мал)? Спасибо!

4b9b3361

Ответ 1

У вас действительно есть папка /fixtures/ на вашем жестком диске?

Вы, вероятно, намеревались использовать:

FIXTURE_DIRS = ('/path/to/proj_folder/fixtures/',)

Ответ 2

Я указал путь относительно корня проекта в TestCase следующим образом:

from django.test import TestCase

class MyTestCase(TestCase):
    fixtures = ['/myapp/fixtures/dump.json',]
    ...

и он работал без использования FIXTURE_DIRS

Ответ 3

Хорошая практика заключается в использовании переменной PROJECT_ROOT в ваших настройках .py:

import os.path
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
FIXTURE_DIRS = (os.path.join(PROJECT_ROOT, 'fixtures'),)

Ответ 4

Вместо того, чтобы создавать фиксированные папки и размещать в них светильники (в каждом приложении), лучший и быстрый способ справиться с этим состоит в том, чтобы поместить все светильники в одну папку на уровне проекта и загрузить их.

from django.core.management import call_command

class TestMachin(TestCase):

    def setUp(self):
        # Load fixtures
        call_command('loaddata', 'fixtures/myfixture', verbosity=0)

Вызов call_command эквивалентен запуску:

 manage.py loaddata /path/to/fixtures 

Ответ 5

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

class SomeTest(TestCase):

    fixtures = ('myfixture.json',)

Ответ 6

У вас есть два варианта, в зависимости от наличия у вас прибора, или у вас есть набор кода Python для заполнения данных.

Для приборов используйте cls.fixtures, как показано в ответе на этот вопрос,

class MyTestCase(django.test.TestCase):
    fixtures = ['/myapp/fixtures/dump.json',]

Для Python используйте cls.setUpTestData:

class MyTestCase(django.test.TestCase):
    @classmethod
    def setUpTestData(cls):
        cls.create_fixture()  # create_fixture is a custom function

setUpTestData вызывается TestCase.setUpClass.

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

Ответ 7

Скажем, имя вашего проекта hello_django, у него есть приложение с именем api. Ниже приведены шаги по созданию светильников в api:

  • Дополнительный шаг: создать файл fixture из базы данных: python manage.py dumpdata --format=json > api/fixtures/testdata.json
  • Создать тестовый каталог: api/tests
  • Создать пустой файл __init__.py в api/tests
  • Создать тестовый файл: test_fixtures.py

Test Fixtures

  1. Запустите тест (загрузите ваши светильники в базу данных): python manage.py test api.tests