python - 如何在 Django 应用程序中测试删除视图?
问题描述
我想测试我的视图,但我的删除功能有问题。
class AnimalView(APIView):
def delete(self, request, format = None):
id = int(request.GET.get('id'))
try:
animal = Animal.objects.get(id=id)
except:
return Response(status=status.HTTP_404_NOT_FOUND)
animal.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
这是我的模型:
class Animal(models.Model):
name = models.CharField(unique=True, max_length=30, blank=False, null=False)
class Meta:
managed = True
db_table = 'animal'
ordering = ['name']
def __str__(self):
return str(self.name)
这是我正在尝试进行的测试:
class TestURL(TestCase):
def setUp(self):
self.client = Client()
def test_animal_delete(self):
animal = Animal.objects.create(name = 'TestAnimal')
response = self.client.delete(reverse("category_animal"), json.dumps({'id' : animal.id}))
self.assertEqual(status.HTTP_204_NO_CONTENT,response.status_code )
但我得到一个
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
你能帮我做测试吗?
解决方案
由于数据是在 中编码的request.GET
,因此应该在查询字符串中进行编码,因此:
response = self.client.delete(f'{reverse("category_animal")}?id={animal.id}')
然而,在查询字符串中定义它是很奇怪的。通常使用 URL 参数,或者在请求的内容上指定。
推荐阅读
- jenkins - 是否有从 Jenkins 作业调用 Jenkinsfile 的选项(例如我们如何在管道中指定脚本路径)?
- jmeter - Jmeter - Graph variable
- python - 行为:如何在非玩具项目中组织此框架的文件
- javascript - Javascript获取解析的json字符串的类
- kaizala - Kaizala 存储对话
- angular - Angular:ExpressionChangedAfterItHasBeenCheckedError,当从后端服务器检索数据而没有更新视图时
- scala - 找不到隐式参数的值(可扩展记录)
- css - 如何将元素的背景剪辑到其内容框?
- php - 在 View Yii 2 中显示相关数据
- python - 比较列和行上的两个熊猫数据框