Django 2.2 - 使用 assertQuerySetEqual 测试响应上下文失败



尝试使用 assertQuerysetEqual 在 Django TestCase 中测试响应上下文,但失败了。

我尝试打印 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())

从其他问题中找到解决方案,最终遇到类似问题

解决方案是使用不同的变换函数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)

最新更新