django - Django mock 根本没有被调用
问题描述
我的测试定义如下
@patch('user.serializers.validate_sns_token', return_value=True)
def test_can_create_user(self, validate):
"""
Test that user can be created without logging in
:return:
"""
user_payload = self.generate_user_payload()
resp = self.client.post(
CREATE_USER_URL,
user_payload,
)
self.assertTrue(validate.called)
self.assertEqual(
resp.status_code,
status.HTTP_200_OK,
)
在 user.serializers.py 文件中,我有以下要模拟的函数
def validate_sns_token(**kwargs):
try:
...
return True
except ValueError as e:
...
return False
这是对 google api 的外部调用,所以我想总是从中返回 True。
在序列化程序中,我正在调用如下的创建函数
def create(self, validated_data):
...
is_token_valid = validate_sns_token(
sns_id=sns_id,
sns_type=sns_type,
token=token,
)
if is_token_valid is False:
raise serializers.ValidationError('토큰이 유효하지 않습니다. 다시 로그인해주세요.', code='AUTH')
...
return user
不幸的是, validate.call 总是 False 并且原始的 validate_sns_token 仍然被调用。如何编写测试,以便根本不调用原始的 validate_sns_token 但将其返回值设置为 True?
解决方案
推荐阅读
- node.js - 我如何在节点中使用 promise 方法
- c# - 如何从程序集 DLL 中获取 Type 对象?
- react-native - 导航不是移动屏幕的功能
- sql - PostgreSQL 布尔比较
- android-studio - 音频播放器如何在回收站视图中播放音频?
- python-3.x - 这个模型对象属性使用示例对于 django 中的登录会话是唯一的吗?
- java - Java HttpClient - 将 HttpResponse 转换为 String[]
- xcode - 忽略 ffi-1.13.1,因为它的扩展没有构建。试试: gem pristine ffi --version 1.13.1
- python - JSON - 对可序列化对象列表进行编码
- c++ - 为什么我们使用 const 和 reference 作为参数来复制构造函数?