繁体   English   中英

使用参数在装饰器中传递自我

[英]Passing self in a decorator with params

我试图在单元测试中设置一个装饰器,装饰器的目的是确保用户在访问其他端点之前登录。

下面是登录的装饰器:

def login_decorator(*args, **kwargs):
    def login_user():
        kwargs['self'].client.login(
            username=kwargs['email'],
            password=kwargs['password'],
        )

然后我尝试在单元测试 function 中使用它,如下所示:

@login_decorator(self=self, email=self.email, password=self.password)
    def test_customer_profile_add(self):
        response = super().create_customer_profile(self.customer_data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)

但是self带有错误 Unresolved reference 的下划线,我怎样才能通过 self.decorator 实现参数的传递。

您应该将参数传递给login_user function:


def login_decorator(func):
    def login_user(self, *args, **kwargs):
        # function args
        print(self.username, self.password)
        self.client.login(
            username=self.username,
            password=self.password,
        )
        func(self, *args, **kwargs)

和你的测试 function:

@login_decorator
def test_customer_profile_add(self):
    response = super().create_customer_profile(self.customer_data)
    self.assertEqual(response.status_code, status.HTTP_201_CREATED)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM