我做覆盖率报告,有很多地方没有覆盖,你有什么想法,我如何写测试?
此views.py未被覆盖
def addreview(request, u_id, shop_id):
url = request.META.get('HTTP_REFERER')
shop = shop_detail.objects.get(id=shop_id)
user = Profile.objects.get(customer=u_id)
if request.method == 'POST':
form = ReviewForm(request.POST)
if form.is_valid():
data = Review()
data.review_text = form.cleaned_data['review_text']
data.review_rating = form.cleaned_data['review_rating']
data.shop = shop
data.user = user
data.save()
return redirect(url)
def rating(request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse('customer_login'))
if request.method == 'POST':
form = RateUsForm(request.POST)
if form.is_valid():
rate = RateUs()
rate.rate_text = form.cleaned_data['rate_text']
rate.rating = form.cleaned_data['rating']
rate.user = request.user
rate.save()
return HttpResponseRedirect(reverse("index"))
return render(request, 'shop/rate.html')
型号.py
class Review(models.Model):
user = models.ForeignKey(Profile,on_delete=models.CASCADE)
shop = models.ForeignKey(shop_detail,on_delete=models.CASCADE)
review_text = models.TextField(max_length=300)
review_rating = models.IntegerField()
def __str__(self):
return f"{self.review_rating}"
class RateUs(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
rate_text = models.TextField()
rating = models.IntegerField()
def __str__(self):
return f"{self.rating}"
表单.py
class ReviewForm(forms.ModelForm):
class Meta:
model= Review
fields= ["review_text", "review_rating"]
class RateUsForm(forms.ModelForm):
class Meta:
model= RateUs
fields= ["rate_text","rating"]
这是我写的评级
def test_valid_rating(self):
rateus1 = RateUs.objects.first()
data={
"user": rateus1.user,
"rate_text": rateus1.rate_text,
"rating": rateus1.rating
}
response = self.client.post(reverse('rating'), data=data)
self.assertEqual(response.status_code, 302)
当我尝试为addreview编写测试时,我得到了客户.模型.配置文件.不存在:配置文件匹配查询不存在。
1条答案
按热度按时间7bsow1i61#
下面是您需要实现的内容,以获得测试函数的方法:
也许你需要对每个例子做一些调整,因为它只是你如何实现它的一个指南。
Profile
,则需要在之前创建它,以预测调用函数后将执行的代码行。request
并模拟request
具有的所有属性。redirect
,但在本例中只是为了知道是否调用了它。