#django #unit-testing #testing #fixtures
#django #модульное тестирование #тестирование #приспособления
Вопрос:
Я, наконец, решил создать модульный тест для всего моего кода. То есть я пытаюсь создать приспособления на основе моих моделей, чтобы протестировать мою функцию на них.
Я создал приспособление json с помощью команды dumpdata и поместил его в каталог fixtures в моем приложении. Ниже приведен код из моего теста:
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)
Я запускаю свой тест, используя следующую команду на моей машине Arch Linux:
python2.7 manage.py test myapp
Он создает базу данных sqlite и устанавливает все таблицы и показатели, однако в конце говорится, что приспособления не найдены, и говорится, что мой тест не удался, поскольку он не нашел никаких данных.
Я запускаю последнюю версию версии Django для разработки и заметил, что на основе документации я должен импортировать unittest с помощью:
from django.utils import unittest
Однако, когда я делаю это, он жалуется, что unittest не может быть импортирован. Вот почему я импортирую unittest непосредственно из моего python path, который сработал.
Я уже пытался имитировать объекты модели django раньше, но я думаю, что лучше тестировать приложения Django с использованием приспособлений, чем с использованием макетных библиотек. Есть идеи, как загрузить приспособления?
Заранее спасибо.
РЕДАКТИРОВАТЬ: Если я изменю имя моего приспособления на initial_data.json, оно будет загружаться при каждом запуске моего теста. Однако мне все еще нужно иметь несколько имен приспособлений для выполнения разных тестов.
РЕДАКТИРОВАТЬ: я заставил его работать, импортировав TestCase из следующего:
from django.test import TestCase
Ответ №1:
Есть пара вещей, которые могли бы помочь:
- Вы можете запустить тест с помощью —verbosity = 2, чтобы увидеть, в каких каталогах django ищет приспособления.
- django рекомендует использовать django TestCase, в отличие от unittest.
- Где находится ваш каталог / файл приспособлений? Если этого нет в вашем приложении, вы должны указать каталог приспособлений в своем файле настроек.
Комментарии:
1. Я запустил тестирование, используя параметр детализации, о котором вы упоминаете. Оно ищет приспособления initial_data и не заботится о том, что я пишу в своем списке приспособлений в моем тесте. Я получаю много следующих ошибок:
2. Пытаюсь найти ‘/home/myname/public_html/mysite / ../mysite/myapp/fixtures’ для initial_data.json ‘initial_data’… Нет json-приспособления ‘initial_data’ в ‘/home/myname/public_html/mysite / ../mysite /myapp/fixtures’.
Ответ №2:
Вы проверили, доступен ли путь, в котором присутствует приспособление, в:
settings.FIXTURE_DIRS = ('/path/to/proj_folder/fixtures/',)
Ответ №3:
У меня была проблема с именем. Приведенный ниже код не работал, даже если у меня был файл в моем каталоге приспособлений в папке app.
приспособления = [‘initial_data2.json’]
Затем я изменил инструкцию import на приведенную ниже, и это просто сработало.
из django.test импортируйте TestCase
Ответ №4:
У меня была такая же проблема, и причина, по которой у меня это не сработало, заключалась в том, что у меня не было расширения в моем файле исходных данных.
Я сделал:
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
Ответ №5:
Просто для подтверждения инструкции import для TestCase, которая прерывает поиск любых приспособлений, но работает всеми другими способами, поэтому просто не выдает ошибок, поскольку не пытается загрузить приспособление, это
from django.utils.unittest import TestCase
… НЕ ИСПОЛЬЗУЙТЕ ЕГО … как рекомендовано использовать
from django.test import TestCase