2013-07-05 11 views
7

Django sitem, üretimde kimlik doğrulaması için LDAP arka ucunu kullanmaktadır, ancak bu, test için uygun değildir (kukla kullanıcılardan istek oluşturmak imkansızdır). Bu arka ucunu, yalnızca testler için nasıl devre dışı bırakabilirim?Django Kimlik Doğrulamasını Geri Yükleme için Test Etme Arka Planını Değiştirme

İşte alakalı settings.py bölümdür:

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 
    } 

cevap

12

örneğin myproj/test_settings.py için alternatif ayarları dosyası oluşturun ve birim testleri çalıştırırken ayarları dosyasının belirtin.

olduğunu
from myproj.settings import * 

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

, ayarlar normal ayarlardan her şeyi devralır ancak dışarı yorumladı LDAP arka ucuyla, AUTHENTICATION_BACKENDS tanımını geçersiz kılar:

alternatif ayarları böyle dosyası yaz.

Sonra, bu gibi testleri:

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

yalnızca belirli testler için arka uç devre dışı bırakmak istediğiniz/gerekiyorsa, ayrıca override_settings dekoratör kullanabilirsiniz. Sen test durumu sınıfına bu dekoratör kullanabilirsiniz:

from django.test.utils import override_settings 

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

    def test_bar(self): 
     pass 

Ama aynı zamanda seçici bir test yöntemine kullanabilirsiniz: İleride

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

e testtir için içine bakmak için başka bir seçenek User nesnesinin is_authenticated özelliğini bir lambda olarak değiştirin. Örneğin:

user = User(...) 
user.is_authenticated = lambda: True 
İlgili konular