Python Unittest: объедините два теста в один подтест
у меня есть два похожих теста:
def test_group_posts_context(self):
response = self.author_client.get(
reverse('posts:group_posts', kwargs={'slug': self.group.slug})
)
self.assertEqual(response.context.get('group'), self.group)
def test_author_profile_context(self):
response = self.author_client.get(
reverse('posts:profile', kwargs={'username': self.user.username})
)
self.assertEqual(response.context.get('author'), self.user)
Оба теста работают нормально, но я пытаюсь объединить их в один единственный подтест.
Но построение, подобное этому, вызывает ошибку ValueError: слишком много значений для распаковки (ожидалось 2).
def test_both_profile_and_group_show_correct_context(self):
templates_page_names = {
reverse('posts:index'),
reverse('posts:group_posts', kwargs={'slug': self.group.slug}),
reverse('posts:profile', kwargs={'username': self.post.author}),
}
for reverse_name in templates_page_names:
with self.subTest(reverse_name=reverse_name):
response = self.author_client.get(reverse_name)
context_fields = {
'group': self.group,
'author': self.user,
}
for value, expected in context_fields:
with self.subTest(value=value):
context_field = response.context.get(value)
self.assertEqual(context_field, expected)
Мой рецензент говорит, что я должен попробовать использовать кортеж типа (page_address, context name, expected object)
, но на самом деле я не могу понять, как использовать его здесь :(.
Views.py:
def group_posts(request, slug):
group = get_object_or_404(Group, slug=slug)
page_obj = get_paginate(
request.GET.get('page'),
group.posts.select_related('author')
)
context = {
'group': group,
'page_obj': page_obj,
}
return render(request, 'posts/group_list.html', context)
def profile(request, username):
author = get_object_or_404(User, username=username)
page_obj = get_paginate(
request.GET.get('page'),
author.posts.select_related('group')
)
context = {
'author': author,
'page_obj': page_obj,
}
return render(request, 'posts/profile.html', context)