2013-07-05 7 views
7

私のDjangoサイトは本番環境での認証にLDAPバックエンドを使用しますが、これはテストには適していません(ダミーユーザーからのリクエストの作成は不可能です)。このバックエンドをテスト専用に無効にするにはどうすればよいですか?テストのためのDjango認証バックエンドの変更

はここでは関係settings.pyセクションです:

AUTHENTICATION_BACKENDS = (
#'crowd.backend.CrowdBackend', 
# 'django_auth_ldap.backend.LDAPBackend', 
'django.contrib.auth.backends.ModelBackend', 
    ) 
    AUTH_LDAP_SERVER_URI = "ldap://ldap.cablelabs.com" 
    import ldap 
    from django_auth_ldap.config import LDAPSearch 

    AUTH_LDAP_BIND_DN = "CN=CableLabs Internal,OU=cabletest,OU=Teamwork,OU=community,DC=cablelabs,DC=com" 
    AUTH_LDAP_BIND_PASSWORD = "UAq,[email protected]" 
    AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=community,dc=cablelabs,dc=com",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)") 
    AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn","username":"sAMAccountName","email":"mail","photo":"thumbnailPhoto"} 
    AUTH_LDAP_CONNECTION_OPTIONS = { 
    ldap.OPT_REFERRALS: 0 
    } 

答えて

12

myproj/test_settings.pyための代替設定ファイルを、作成し、単体テストを実行している場合、設定ファイルに指定します。

代替設定を書くには、このようなファイル:

from myproj.settings import * 

AUTHENTICATION_BACKENDS = (
     #'your.ldap.backend', 
     'django.contrib.auth.backends.ModelBackend', 
     ) 

つまり、設定は通常の設定からすべてを継承しますが、あなたのLDAPバックエンドをコメントアウトして、AUTHENTICATION_BACKENDS定義を上書きします。

そこで、このようなあなたのテストを実行します。

python manage.py test --settings=myproj.test_settings 
13

あなたが唯一の特定のテストのためのバックエンドを無効にしたい/必要がある場合は、override_settingsデコレータを使用することができます。

from django.test.utils import override_settings 

@override_settings(AUTHENTICATION_BACKENDS= 
        ('django.contrib.auth.backends.ModelBackend',)) 
class FooTest(TestCase): 

    def test_bar(self): 
     pass 

しかし、あなたはまた、選択的試験方法でそれを使用することができます:あなたは、テストケースクラスで、このデコレータを使用することができます

from django.test.utils import override_settings 

class FooTest(TestCase): 

    @override_settings(AUTHENTICATION_BACKENDS= 
         ('django.contrib.auth.backends.ModelBackend',)) 
    def test_bar(self): 
     pass 
0

今後の参考のために、テストのために検索する別のオプションがにありますUserオブジェクトのis_authenticatedプロパティをラムダに変更します。例:

user = User(...) 
user.is_authenticated = lambda: True 
関連する問題