django .db.utils.IntegrityError: Проблема с установкой устройства - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь создать фикстур из моих данных базы данных разработки и храню его в своей тестовой базе данных. Эти данные оказываются только одной моделью. Я запустил команду dumpdata следующим образом:

python manage.py dumpdata minerals.mineral --all --indent=4 --output=minerals/test_minerals/fixtures/test_mineral_data.json

При попытке запустить python manage.py test возникает следующая ошибка:

django.db.utils.IntegrityError: Problem installing fixture '../minerals/test_minerals/fixtures/test_mineral_data.json': Could not load minerals.Mineral(pk=872): UNIQUE constraint failed: minerals_mineral.name

https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django .test.TransactionTestCase.fixtures

По умолчанию приборы загружаются только в базу данных по умолчанию.

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

У меня было первоначальное впечатление, что приборы были сохранены в пустой базе данных при попытке выполнить модульное тестирование, но, очевидно, это неправильно? Что можно сделать, чтобы эмулировать данные для проверки?

tests.py

class SearchFormResults(TestCase):

    fixtures = ['minerals/test_minerals/fixtures/test_mineral_data.json']

    def test_user_search_query_fail(self):
        response = self.client.get(
            reverse("minerals:search_list"), data={'query': 'Kryptonite'},
            HTTP_REFERRER=reverse(
                "minerals:letter_list", kwargs={'query': 'N'}
            ), follow=True
        )

models.py

class Mineral(models.Model):
    name = models.CharField(unique=True, max_length=255)
    image_filename = models.ImageField(max_length=255, blank=True)
    image_caption = models.CharField(max_length=255, blank=True)
    category = models.CharField(max_length=255, blank=True)
    formula = models.CharField(max_length=255, blank=True)
    strunz_classification = models.CharField(max_length=255, blank=True)
    crystal_system = models.CharField(max_length=255, blank=True)
    unit_cell = models.CharField(max_length=255, blank=True)
    color = models.CharField(max_length=255, blank=True)
    crystal_symmetry = models.CharField(max_length=255, blank=True)
    cleavage = models.CharField(max_length=255, blank=True)
    mohs_scale_hardness = models.CharField(max_length=255, blank=True)
    luster = models.CharField(max_length=255, blank=True)
    streak = models.CharField(max_length=255, blank=True)
    diaphaneity = models.CharField(max_length=255, blank=True)
    optical_properties = models.CharField(max_length=255, blank=True)
    refractive_index = models.CharField(max_length=255, blank=True)
    crystal_habit = models.CharField(max_length=255, blank=True)
    specific_gravity = models.CharField(max_length=255, blank=True)
    group = models.CharField(max_length=255, blank=True)

    def __str__(self):
        return self.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...