尝试使用 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)