django тестирование Assertquerysetequal не работает - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь выполнить 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))

1 Ответ

0 голосов
/ 04 декабря 2018

Вы не сравниваете два набора запросов, следовательно, почему он не работает.Я не совсем уверен, почему вы сравниваете набор запросов со списком, созданным с помощью [repr(r) for r in pitemlist]?Просто сравните два набора запросов напрямую:

self.assertQuerysetEqual(res.context['object_list'], pitemlist)
...