【问题标题】:Testing Django allauth测试 Django allauth
【发布时间】:2014-09-13 13:26:16
【问题描述】:

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

ImproperlyConfigured: No Facebook app configured: please add a SocialApp using the Django admin

到目前为止,我的方法是使用实​​际的 Facebook 应用程序参数在 tests.py 内实例化应用程序对象,该应用程序可以在浏览器中本地正常运行:

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')

如何让这些测试运行?谢谢

【问题讨论】:

    标签: python django facebook testing django-allauth


    【解决方案1】:

    我会创建一个迁移,以便您的所有环境都有数据

    例如

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

    【讨论】:

      【解决方案2】:

      你在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,请参阅reference

      最后,在互联网上的任何地方发布你的 Facebook 应用程序密钥不是一个好主意 - 如果我是你,我会重置它。

      【讨论】:

      • 我在测试用例def 中实例化了应用程序对象。固定装置会很棒,除了我遇到了无尽的麻烦:stackoverflow.com/questions/19857406/… 这是我在使用你的 setUpModule 解决方案时得到的。还有其他想法吗?回复:密钥:我很感激这个问题,但我在发布之前已经随机化了。
      • 嗯,我很茫然。尝试手动创建夹具,看看是否有效。类似于[{"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"}}]
      • 再次,ImproperlyConfigured 令人窒息。我直接从数据转储中获取了特定的夹具段以确保有效性。它必须以某种方式要求更多。也许我需要正视上面提到的主要夹具错误。还有其他想法吗?谢谢!
      • 这似乎解决了夹具问题,所以您的答案是正确的:stackoverflow.com/a/11409794/770513 感谢您的关注!
      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 2015-03-06
      • 2014-08-30
      • 1970-01-01
      • 2015-07-29
      • 2017-04-13
      • 2013-06-01
      相关资源
      最近更新 更多