python正在询问tes中的现有参数

2024-04-24 02:52:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着测试信号。我在app.signals.py中有信号项

from django.dispatch import Signal 
task_completed = Signal(providing_args=['balance'])

Func位于user.views中,它根据任务成本更新余额

from django.contrib.messages import success
from users.models import User
from django.db.models import F
from freelance.signals import task_completed


def update_balance(cls, balance):
    User.objects.select_for_update().filter(user_type=User.CUSTOMER).update(
        balance=F('balance') - balance
    )
    User.objects.select_for_update().filter(user_type=User.EXECUTER).update(
        balance=F('balance') + balance
    )
    if success:
        task_completed.send_robust(
            sender=cls,
            balance=balance,
        )

创建任务后,在task.models中调用func

@receiver(post_save, sender=Task)
def task_post_save(sender, instance, **kwargs):
    instance.assignee.update_balance(instance.money)

最后测试一下我想为所有这些东西做些什么

class TestCharge(TestCase):
    def test_should_send_signal_when_charge_succeeds(self):
        self.signal_was_called = False
        self.total = None

        def handler(sender, balance, **kwargs):
            self.signal_was_called = True
            self.total = balance

        task_completed.connect(handler)

        update_balance(100)

        self.assertTrue(self.signal_was_called)
        self.assertEqual(self.total, 100)

        task_completed.disconnect(handler)

但它会给人错误的感觉

TypeError: update_balance() missing 1 required positional argument: 'balance'

Tags: djangoinstancefromimportselftasksignalmodels
1条回答
网友
1楼 · 发布于 2024-04-24 02:52:54

从错误中可以看出,您没有在update\u balance()中传递必需的参数。 错误在这一行:

update_balance(100)

但根据您的函数定义:

def update_balance(cls, balance):

update\u balance接受两个参数,因此需要如下更新代码:

class TestCharge(TestCase):
    def test_should_send_signal_when_charge_succeeds(self):
        self.signal_was_called = False
        self.total = None

        def handler(sender, balance, **kwargs):
            self.signal_was_called = True
            self.total = balance

        task_completed.connect(handler)

        update_balance("First value here",100)

        self.assertTrue(self.signal_was_called)
        self.assertEqual(self.total, 100)

        task_completed.disconnect(handler)

相关问题 更多 >