Как я могу проверить в тесте, получен ли ответ с формой или без нее? - PullRequest
0 голосов
/ 11 марта 2019

Как и в заголовке, я не знаю, как я могу проверить, является ли в ответе представление с формой или без нее, потому что, по моему мнению, пользователь получает форму только в том случае, если request.user.is_authenticated.

##views.py

def product_detail(request, id, slug):

    product = get_object_or_404(Product, id=id, slug=slug,)
    comments = product.comments.all()

    if request.user.is_authenticated:
        if request.method == 'POST':
            form = CommentForm(request.POST)
            if form.is_valid():
                new_comment = form.save(commit=False)
                new_comment.product = product
                new_comment.nick = get_object_or_404(User, id=str(request.user.id))
                form.save()
                return redirect('product_detail', id=product.id, slug=product.slug)
        else:
            form = CommentForm()

        return render(request, 'shop/product/Product_detail.html',
                      {'product': product, 'form': form, 'comments': comments})

    else:
        return render(request, 'shop/product/Product_detail.html',
                      {'product': product, 'comments': comments})

У меня есть тест на просмотр, чтобы проверить, загружаются ли представления, но как аутентифицированные, так и не аутентифицированные пользователи имеют доступ к этому представлению, единственное отличие состоит в том, что не прошедшие проверку пользователи получают представление без формы, и я не знаю, как это проверить.

##test_views.py

    def test_call_view_loads(self):
        product = Product.objects.get(id=1)
        response = self.client.get(f'/shop/{product.id}/{product.slug}/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'shop/product/Product_detail.html')

Ответы [ 3 ]

1 голос
/ 11 марта 2019

Найдите свой класс формы в вашем контексте:

self.assertIsInstance(response.context['form'], CommentForm) #find your form in context
1 голос
/ 11 марта 2019

Вы можете получить используемый контекст из response, возвращенного тестовым клиентом.

self.assertTrue('form' in response.context)

Однако это не должно быть то, как вы проверяете, вошел ли пользователь в систему или нет; Только в том случае, если определенные переменные контекста передаются в шаблон.

0 голосов
/ 11 марта 2019

Вы можете сделать это, используя self.client.login(username='user', password='pass') внутри вашего test_call_view_loads, например:

from django.test.client import Client

def setUp(self):
    self.client = Client()
    self.user = User.objects.create_user('user', 'user@email.com', 'pass')


def test_call_view_loads_loggined_user(self):
    product = Product.objects.get(id=1)
    self.client.login(username='user', password='pass')  # login the user
    response = self.client.get(f'/shop/{product.id}/{product.slug}/')
    self.assertEqual(response.status_code, 200)
    self.assertTemplateUsed(response, 'shop/product/Product_detail.html')
    self.assertTrue('form' in response.context)  # for check that is form in context or not
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...