При тестировании приложения на Django не найдено никаких приспособлений - PullRequest
5 голосов
/ 17 мая 2011

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

Я создал приспособление json с помощью команды dumpdata и поместил его в директорию приспособлений моего приложения. Ниже приведен код моего теста:

import unittest
from mysite.myapp.models import Post

class RatingTestCase(unittest.TestCase):
  fixtures = [
      'posts.json',
  ]

def test_me(self):
  p = Post.objects.all()
  self.assertTrue(p)

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

python2.7 manage.py test myapp

Он создает базу данных sqlite и устанавливает все таблицы и индексы, однако в конце он сообщает, что не найдено никаких приборов, и говорит, что мой тест не пройден, поскольку он не нашел никаких данных.

Я работаю с последней версией Django для разработчиков и заметил, что на основе документации, которую я должен импортировать unittest, используя:

from django.utils import unittest

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

Ранее я пытался смоделировать объекты модели django, но я думаю, что лучше тестировать приложения Django с использованием осветителей, чем с использованием имитирующих библиотек. Есть идеи как загрузить светильники?

Заранее спасибо.

EDIT: если я изменю имя своего прибора на initial_data.json, он будет загружаться при каждом запуске теста. Однако мне по-прежнему нужно иметь несколько имен приборов для запуска разных тестов.

РЕДАКТИРОВАТЬ: я заработал, импортировав TestCase из следующего:

from django.test import TestCase

Ответы [ 5 ]

5 голосов
/ 17 мая 2011

Есть пара вещей, которые могут помочь:

  1. Вы можете запустить тест с --verbosity = 2, чтобы увидеть, какие каталоги ищет django для приборов.
  2. django TestCaseэто то, что django рекомендует использовать, а не unittest.
  3. Где находится каталог / файл вашего прибора?Если его нет в вашем приложении, вы должны указать каталог фикстур в вашем файле настроек.
0 голосов
/ 15 апреля 2016

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

Я сделал:

manage.py dumpdata > initial_data
manage.py loaddata initial_data

Что не работает, так как нет никакого расширения для initial_data, однако, это работает:

mv initial_data initial_data.json 
manage.py loaddata --verbosity=2 initial_data.json 
0 голосов
/ 11 сентября 2013

Просто для подтверждения оператора импорта для TestCase, который прерывает поиск любых приборов но работает во всех других отношениях, поэтому просто не выдает ошибок, так как он не пытается загрузить прибор -

from django.utils.unittest import TestCase

... НЕ ИСПОЛЬЗУЙТЕ ЭТО ... как рекомендуется

from django.test import TestCase
0 голосов
/ 15 сентября 2011

У меня была проблема с именем.Приведенный ниже код не будет работать, даже если у меня есть файл в каталоге приборов в папке приложения.

fixtures = ['initial_data2.json']

Я тогдаизменил оператор импорта на ниже, он просто работал.

из django.test import TestCase

0 голосов
/ 17 мая 2011

Вы проверили, доступен ли путь, где присутствует прибор, в:

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