【发布时间】:2020-06-12 01:48:10
【问题描述】:
我正在尝试为 API 编写测试。我遇到了几个用户模型方法的问题。这些方法都适用于开发和生产环境,但测试却不行。
这是测试:
def test_delete_user(self):
USER_DELETED = 1
self.u = self.setup()
result = User.delete_user(self.u, self.u.pk)
# response
self.assertEqual(result, USER_DELETED)
# functionality
self.assertIsNone(self.u)
print(self.u)
当我运行这个测试时,返回值USER_DELETED是正确的,但实际上并没有删除用户对象。
self.setup() 返回单个创建的用户。如果需要,我可以发布它,但设置和拆卸都适用于 UserTest 类中的各种其他测试。
这是正在测试的模型方法:
@staticmethod
def delete_user(requesting_user, user_id):
# static variables
USER_DELETED = 1
NOT_AUTHORIZED = 0
NO_USER = -1
user_to_be_deleted = User.get_user_from_user_id(user_id)
if user_to_be_deleted == NO_USER:
return NO_USER
# check for authorization to delete
if requesting_user != user_to_be_deleted:
return NOT_AUTHORIZED
user_to_be_deleted.delete()
return USER_DELETED
我还尝试使用设置创建用户,然后调用 self.u.delete() 而不是我拥有的自定义方法。这给出了相同的结果:AssertionError: <User: test_user> is not None
有人可以解释我在这里做错了什么吗?
谢谢。
【问题讨论】:
-
如果在断言
None之前调用self.u.refresh_from_db(),结果是否相同? -
我刚试过
self.u.refresh_from_db(),它给了我这个错误:prototype.models.User.DoesNotExist: User matching query does not exist.,这让我觉得这是在正确的轨道上。 -
从数据库中删除条目不会导致实例突然变为
None。您需要测试数据库中不再存在具有相同pk的条目
标签: python django unit-testing testcase