Я хочу протестировать и сравнить лучшие 3 реальных данных в db и идеальных. Я написал в test.py как
from django.test import TestCase
from app.models import User
# Create your tests here.
class UserModelTests(TestCase):
def test_is_empty(self):
saved_user = User.objects.first(3)
self.assertEqual(saved_user, XXXX)
У пользователя save_user есть 'name': Tom,'user_id': 1,'nationarity': America, 'dormitory':'A', 'group': 3 'name': Bob,'user_id': 2,'nationarity': China, 'dormitory':'B', 'group': 4 ・・・・
, поэтому я хочу сравнить Tom & 1 & America & A & 3, набираемые мной и реальными данными db. Я действительно не могу понять, как писать вместо XXX.Data, 4 вида я смутился. Как я должен это писать?
Экземпляры модели Django сравниваются с первичным ключом, поэтому тестирование с экземпляром User
здесь не будет работать. Самое простое решение здесь - использовать Queryset.values(...)
для извлечения необработанных записей как dicts и сравнения с dicts.
Кроме того, User.objects.first(3)
просто не будет работать (поднимет TypeError
) - Queryset.first()
не принимает аргументов и возвращает один экземпляр модели. Чтобы получить только первые три записи (на основе заказа по умолчанию для модели), вы должны нарезать свой User.objects.all()[:3]
, т. User.objects.all()[:3]
.
IOW вы хотите:
users = list(User.object.values()[:3])
expected = [
{'name': 'Tom','user_id': 1,'nationarity': 'America'}, # etc
{'name': 'Bob','user_id': 2,'nationarity': 'China', # etc
# etc
]
self.assertEqual(expected, users)