测试Django allauth socialAccount创建

问题描述

用户使用socialAccount(在我的情况下为Google)进行注册时,我有一个user_signed_up信号,用于测试用户是否使用了socialAccount进行了注册,如果他们这样做了,则它将socialAccount实例中的数据与用户模型实例。

作为pytest的一部分,我如何使用socialAccount方法创建用户

信号定义为:

import logging

from allauth.account.signals import user_signed_up
from django.contrib.auth import get_user_model
from django.dispatch import receiver

User = get_user_model()

logger = logging.getLogger("email_app.apps.users")


@receiver(user_signed_up,sender=User,dispatch_uid="apps.users.signals")
def associate_social_data_with_user_model(user,**kwargs):
    if user.socialaccount_set.filter(provider='google').count() < 1:
        logger.info(f"social account single sign on not used. user signed up the old fashioned way. {user = }")
    else:
        extra_data = user.socialaccount_set.filter(provider='google')[0].extra_data
        user.name = extra_data['given_name']
        user.save()

解决方法

看看allauth.tests.MockedResponse的基础知识,尤其是allauth.socialaccount.providers.google.tests.GoogleTests.test_user_signed_up_signal。简而言之:信号机制已经在那里进行了测试,您可以使用该测试用例,并使用针对您的数据的测试对其进行扩展。