测试 Django allauth

7
我正在尝试测试我的应用程序,但是不确定如何在测试环境中配置django-allauth。我得到了以下错误提示信息:
ImproperlyConfigured: No Facebook app configured: please add a SocialApp using the Django admin
我的解决方法是在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个回答

3

tests.py 文件中,你需要实例化这个应用程序对象的位置在哪里?如果它在 setUpModule() 方法内部,那么就不应该有问题。

个人建议是创建一个名为 init_facebook_app.json 的 fixture,并在 tests.py 文件中(测试用例之前)定义:

from django.core.management import call_command    

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

这将确保在运行测试之前装置中的数据已加载,并且它们仅加载一次,即不是在每个测试之前。关于call_command,请参见此处的参考。
最后,在互联网上任何地方发布您的Facebook应用程序秘密密钥都不是一个好主意 - 如果我是您,我会重置它。

1
我在Testcase def中实例化了app对象。使用Fixture会很好,但是我遇到了无尽的问题,比如:https://dev59.com/EGIj5IYBdhLWcg3wzINo 这就是当我使用你的setUpModule解决方案时遇到的问题。还有其他的想法吗?关于秘钥:我感谢你的关心,但是在发布之前我已经随机生成了它。 - KindOfGuy
1
嗯,我有点不知所措。尝试手动创建fixture,看看是否有效。大致可以是这样的: [{"pk": 1, "model": "sites.site", "fields": {"domain": "127.0.0.1:8000", "name": "creyu.org"}}, {"pk": 1, "model": "socialaccount.socialapp", "fields": {"name": "Facebook", "sites": [1], "secret": "XXX", "client_id": "XXX", "key": "", "provider": "facebook"}}] - kreld
再次出现了ImproperlyConfigured错误。我直接从数据转储中获取了特定的fixture片段以确保有效性。它一定需要更多的东西。也许我需要面对上面提到的主要fixture错误。还有其他想法吗?谢谢! - KindOfGuy
1
这似乎解决了fixture问题,所以你的答案是正确的:https://dev59.com/DHA75IYBdhLWcg3wDUgo#11409794 感谢您的关注! - KindOfGuy

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),
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接