나는 pytest 3.0.6과 pytest-django 3.1.2를 사용하여 장고를위한 라이브러리에서 작업한다. 나는이 매우 간단한 테스트 실패가 있고, 나는 일이 무엇인지 이해하지 않습니다Pytest-django : 사용자 권한 설정
# test_mytest.py
import pytest
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
@pytest.mark.django_db
def test_user_has_perm(django_user_model):
# Create a new user
john_doe = django_user_model.objects.create_user('johndoe', email='[email protected]', password='123456')
# Get or create the permission to set on user
user_ct = ContentType.objects.get(app_label='auth', model='user')
p, _ = Permission.objects.get_or_create(content_type=user_ct, codename='delete_user', name="Can delete user")
# User don't have the permission
assert john_doe.has_perm(p) is False
# Set permission to user
john_doe.user_permissions.add(p)
assert john_doe.has_perm(p) is True # ---> FAIL
그냥 경우, 시험의 결과는 다음과 같습니다
$ pytest
============================= test session starts =============================
platform win32 -- Python 3.5.3, pytest-3.0.6, py-1.4.32, pluggy-0.4.0
Django settings: testsite.settings (from ini file)
rootdir: D:\Dev\foss\django-modern-rpc, inifile: tox.ini
plugins: pythonpath-0.7.1, django-3.1.2, cov-2.4.0
collected 1 items
modernrpc\tests\test_test_test.py F
================================== FAILURES ===================================
_____________________________ test_user_has_perm ______________________________
django_user_model = <class 'django.contrib.auth.models.User'>
@pytest.mark.django_db
def test_user_has_perm(django_user_model):
# Create a new user
john_doe = django_user_model.objects.create_user('johndoe', email='[email protected]', password='123456')
# Get or create the permission to set on user
user_ct = ContentType.objects.get(app_label='auth', model='user')
p, _ = Permission.objects.get_or_create(content_type=user_ct, codename='delete_user', name="Can delete user")
# User don't have the permission
assert john_doe.has_perm(p) is False
# Set permission to user
john_doe.user_permissions.add(p)
> assert john_doe.has_perm(p) is True # ---> FAIL
E assert False is True
E + where False = <bound method PermissionsMixin.has_perm of <User: johndoe>>(<Permission: auth | user | Can delete user>)
E + where <bound method PermissionsMixin.has_perm of <User: johndoe>> = <User: johndoe>.has_perm
modernrpc\tests\test_test_test.py:20: AssertionError
========================== 1 failed in 0.32 seconds ===========================
config 블록, tox.ini에서
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'modern_rpc.sqlite3'),
},
}
: 테스트 설정에서
[pytest]
DJANGO_SETTINGS_MODULE = testsite.settings
norecursedirs = .git __pycache__ build dist venv* .tox .vscode .cache *.egg-info
python_paths = modernrpc/tests
testpaths = modernrpc/tests
python_files = test_*.py dummy_*.py
그리고 DB 구성,
내가 뭘 잘못하고 있니? docs에서
고맙습니다. 권한을 얻기 위해 캐시 시스템을 완전히 놓쳤습니다. – Antwane
예. Django는 캐싱이 잘 문서화되어 있지 않기 때문에 코드를 파고 들게합니다. – schwobaseggl