python - 如何在 Django admin 中测试覆盖功能?
问题描述
我在admin
模块中覆盖了函数
@admin.register(Donation)
class DonationAdmin(admin.ModelAdmin):
def log_change(self, request, object, message):
log_obj = super().log_change(request, object, message)
name_map = {name: value.label for name, value
in DonationForm.base_fields.items()}
extended_log = ''
if message:
changed_fields = message[0].get('changed').get('fields')
extended_log = {key: value for key, value in request.POST.items()
if key in changed_fields}
extended_log = self.get_humanize_values(extended_log)
extended_log = dict(
zip(
map(lambda x: name_map[x], extended_log.keys()),
extended_log.values()
)
)
return AdditionalLogEntry.objects.create(
entry=log_obj, extended_log=extended_log)
我该如何测试它?
class DonationAdminTestCase(TestCase):
def setUp(self) -> None:
self.user = UserFactory()
self.donation = DonationFactory()
self.donation_admin = DonationAdmin(model=Donation, admin_site=AdminSite())
def test_log_change(self) -> None:
self.user.is_staff = True
self.user.save()
self.client.force_login(self.user)
# ???
解决方案
我会在更改视图本身上发布一个帖子,这应该会触发更改的日志记录。
change_url = reverse('admin:myapp_donation_change', args=(self.donation.id,))
data = {...} # dictionary with all the data required to make a successful change
self.client.post(change_url, data=data)
self.assertEqual(1, AdditionalLogEntry.objects.count())
...
推荐阅读
- mstest - 任何可用于 specflow 的数据提供者
- javascript - .height 返回的值是实际值的 10 倍以上
- python - 从 Python 列表中获取前 n 个唯一元素
- spring-boot - 尝试获取 Activemq MBean 时出现 InstanceNotFoundException
- javascript - 如何在javascript中动态地将带有数组的深层JS对象减少为没有数组的JS对象?
- javascript - 如何使用 jQuery 控制 CSS 转换的速度?
- json - 如何访问嵌套在牛津词典 API 的多级数组和词典中的定义键?
- python-3.x - 为什么 TensorFlow-gpu 还在使用 cpu
- angular - 响应后调用函数
- java - If语句用于处理来自用户的意外响应以猜测数字程序不起作用