就像标题一样,我不知道如何测试响应是否为具有表单的视图,因为在我看来,用户仅在request.user.is_authenticated时才获得表单。
Y
我有视图测试来检查视图是否加载,但是经过身份验证的用户和未经身份验证的用户都可以访问该视图,唯一的区别是没有经过身份验证的用户正在获取无格式的视图,而且我不知道如何进行测试。
##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})
答案 0 :(得分:1)
在上下文中找到表单类:
self.assertIsInstance(response.context['form'], CommentForm) #find your form in context
答案 1 :(得分:1)
您可以从测试客户端返回的response
中获得使用的上下文。
self.assertTrue('form' in response.context)
但是,这不应该成为您测试用户是否登录的方式;仅将某些上下文变量是否传递到模板。
答案 2 :(得分:0)
您可以在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