测试Django allauth

7 投票
2 回答
1434 浏览
提问于 2025-04-18 14:17

我正在尝试测试我的应用程序,但不确定如何在测试环境中配置django-allauth。我遇到了以下问题:

配置错误:没有配置Facebook应用:请通过Django管理后台添加一个SocialApp

到目前为止,我的做法是在tests.py文件中使用实际的Facebook应用参数来实例化应用对象,这个应用在本地浏览器中运行正常:

from allauth.socialaccount.models import SocialApp

apper = SocialApp.objects.create(provider=u'facebook', 
    name=u'fb1', client_id=u'7874132722290502',
    secret=u'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
apper.sites.create(domain='localhost:8000', name='creyu.org')

我该如何让这些测试运行起来呢?谢谢!

2 个回答

0

我会创建一个迁移,这样你所有的环境都有这些数据。

比如说:

import os
from django.db import models, migrations
from django.core.management import call_command
from django.conf import settings

class Migration(migrations.Migration):

    def add_initial_providers(apps, schema_editor):
        import pdb;pdb.set_trace()
        call_command(
            'loaddata',
            os.path.join(settings.BASE_DIR,         'fixtures/social_auth.json'),
        verbosity=0)

dependencies = [
    ('my_app', '001_auto_20160128_1846'),
]


operations = [
    migrations.RunPython(add_initial_providers),
]
3

你在 tests.py 文件的哪个地方创建这个应用对象?如果是在 setUpModule() 方法里面,那就没问题。

我个人建议你创建一个叫 init_facebook_app.json 的文件,里面放一些相关的信息,然后在 tests.py 文件中(在测试用例之前)定义:

from django.core.management import call_command    

def setUpModule():
    call_command('loaddata', 'init_facebook_app.json', verbosity=0)

这样做可以确保在测试运行之前,文件中的数据会被加载,而且只会加载一次,也就是说,不会在每个测试之前都加载。关于 call_command 的更多信息,可以参考这个 链接

最后,把你的 Facebook 应用的密钥随便放在网上是不明智的做法——如果我是你,我会重置它。

撰写回答