Я пытаюсь выполнить assertqueryset с тестированием django, используя следующие команды, но все они работают, если в списке есть только один объект, но когда я вставляю несколько объектов в список, чтобы сравнить оба набора запросов, все онииногда терпеть неудачу и иногда проходить, что совершенно странно (работает с тем же набором кода).Список assertquerysetequal, который я использовал для тестирования, я получил из двух других вопросов в Как мне проверить, Django QuerySets равны? и в Django 1.4 - assertQuerysetEqual - как использовать метод , а такжедокументация по django.
Это может быть потому, что последовательность не в порядке, когда она не проходит тест сравнения.Потому что, когда я сделал печать - мои наборы запросов были точно совпадают.Потому что, когда я запускаю тесты, иногда тесты проходят, иногда это не получается, когда я сравниваю несколько объектов в моих списках.Я могу сказать им, что список отличается в случае сбоя из-за сообщения об ошибке, но я не понимаю, почему команды, которые я использовал, не сравнивают их по порядку.(Они были приняты / проголосовали с ответами)
Любой совет о том, как я могу исправить это навсегда, будет приветствоваться.Спасибо.
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='normaluser', email='s@gmail.com', password='secret123')
self.notcreateuser = User.objects.create_user(
username='notcreateuser', email='s@gmail.com', password='secret123')
self.adminuser = User.objects.create_user(
username='adminuser', email='s@gmail.com', password='secret123', is_staff=True)
obj_puser = mixer.blend('users.PUser', user=self.user)
obj_puser_oth = mixer.blend('users.PUser', user=self.notcreateuser)
obj_puser_staff = mixer.blend('users.PUser', user=self.adminuser)
obj_ptype = mixer.blend('polls.Ptype', active=True)
obj_pitem0 = mixer.blend('polls.PollItem', polltype=obj_ptype, user_submit=self.user, allowed=True)
obj_pitem1 = mixer.blend('polls.PollItem', polltype=obj_ptype, user_submit=self.user, allowed=True)
def test_poll_list_view_query(self):
self.client.login(username="normaluser", password="secret123")
ptype_obj = Ptype.objects.get(pk__in=[1])
path = "/polls/"
data = {'type': ptype_obj.slug }
res = self.client.get(path, data)
pitemlist = PollItem.objects.filter(pk__in=[1,2])
#list of assertqueriesequal I am testing
self.assertQuerysetEqual(res.context['object_list'], [repr(r) for r in pitemlist])
self.assertQuerysetEqual(res.context['object_list'], pitemlist, transform=lambda x:x)
self.assertQuerysetEqual(res.context['object_list'], map(repr, pitemlist))