Django 2.2 - тестирование контекста ответа с помощью assertQuerySetEqual завершается неудачно - PullRequest
0 голосов
/ 23 июня 2019

Попытка проверить контекст ответа в Django TestCase с помощью assertQuerysetEqual, но это не удалось.

Я пробовал печатать счетчик Country.objects.all().count() и response.context['countries'].count().оба возвращают 1, когда я создаю одну запись в начале теста.

Также пробовал ordered=True в методе подтверждения, но не все равно не прошел тест.Я что-то упустил или мне нужно сделать это по-другому?

Просмотр, который возвращает ответ

class CountriesListView(generic.ListView):
    model = Country
    template_name = 'management/countries/countries.html'
    context_object_name = 'countries'

Тест с использованием

class CountryTest(TestCase):
    def setUp(self):
        self.countries_list_url = '/countries'

    def test_response_returns_countries_context(self):
        Country.objects.create(
            name='India',
            iso_3166_1='IN'
        )
        response = self.client.get(self.countries_list_url)

        self.assertQuerysetEqual(Country.objects.all(), response.context['countries'])

Ошибка, которую я получаю

AssertionError: Lists differ: ['<Country: Country object (1)>'] != [<Country: Country object (1)>]

First differing element 0:
'<Country: Country object (1)>'
<Country: Country object (1)>

- ['<Country: Country object (1)>']
?  -                             -

+ [<Country: Country object (1)>]

Получение такой же ошибки для

self.assertQuerysetEqual(Country.objects.all(), Country.objects.all())

1 Ответ

0 голосов
/ 23 июня 2019

Найдены решения из другого вопроса, которые в итоге приводят к аналогичной проблеме

Решением было использование другой функции преобразования transform=lambda x: x

    def test_response_returns_countries_context(self):
        Country.objects.create(
            name='India',
            iso_3166_1='IN'
        )
        response = self.client.get(self.countries_list_url)

        self.assertQuerysetEqual(response.context['countries'], Country.objects.all(), transform=lambda x: x)
...