测试Django allauth
我正在尝试测试我的应用程序,但不确定如何在测试环境中配置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 应用的密钥随便放在网上是不明智的做法——如果我是你,我会重置它。