Pytest-django: μ„Έμ…˜ κ³ μ • μž₯μΉ˜μ—μ„œ django_db ν‘œμ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 09μ›” 14일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: pytest-dev/pytest-django

ν•¨μˆ˜μ— μ˜ν•΄ μƒμ„±λœ κ±°λŒ€ν•œ db μ‘°λͺ…κΈ°λ₯Ό λ‘œλ“œν•΄μ•Ό ν•˜λŠ” 상황이 μžˆμŠ΅λ‹ˆλ‹€. FixtureλŠ” λͺ¨λ“  API ν…ŒμŠ€νŠΈμ— ν•„μš”ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ conftest.py 에 μ„Έμ…˜ κ³ μ • μž₯치λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ¬Έμ œλŠ” $# django_db ν‘œμ‹œν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  pytest λ‹€μŒ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

E Failed: Database access not allowed, use the "django_db" mark to enable it.
μ•„λž˜λŠ” λ‚΄ μ½”λ“œ μŠ€λ‹ˆνŽ«μž…λ‹ˆλ‹€.

from permission.helpers import update_permissions

pytestmark = [
        pytest.mark.django_db(transaction = True),]

@pytest.fixture(scope="session", autouse = True)
def permission(request):
        load_time_consuming_db_fixture()
db-configuration enhancement

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것은 Django의 UnitTest 클래슀 기반 ν…ŒμŠ€νŠΈμ—μ„œ pytest-django에 이λ₯΄λŠ” κ°€μž₯ 큰 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. Djangoμ—μ„œλŠ” setUpTestData λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°’λΉ„μ‹Ό DB μž‘μ—…μ„ ν•œ 번 μ‹€ν–‰ν•©λ‹ˆλ‹€(μ„Έμ…˜ λ²”μœ„μ˜ pytest κ³ μ • μž₯μΉ˜μ™€ 동일). 그리고 setUp obj.refresh_from_db() λ₯Ό μ‹€ν–‰ν•˜μ—¬ 클래슀 μ°Έμ‘°λ₯Ό μƒˆλ‘œ κ³ μΉ˜λŠ” κ΅ν™œν•œ 트릭이 μžˆμŠ΅λ‹ˆλ‹€.

DB λͺ¨λΈ μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ μƒμ„±ν•˜κ³  TCλ§ˆλ‹€ λ‹€μ‹œ λ‘œλ“œν•˜λ”λΌλ„ 각 ν…ŒμŠ€νŠΈ μ‚¬λ‘€μ—μ„œ μƒμ„±ν•˜λŠ” 것보닀 거의 항상 λΉ λ¦…λ‹ˆλ‹€.

κ°€λŠ₯ν•œ 경우 pytest-tipsi-django λ³‘ν•©λœ μ—…μŠ€νŠΈλ¦Όμ—μ„œ μ„Έμ…˜ λ²”μœ„ κ³ μ • μž₯치λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. 이 λ¬Έμ œμ™€ μ†”λ£¨μ…˜μ„ μ°ΎλŠ” 데 μ•½κ°„μ˜ νŒŒκ³ κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  15 λŒ“κΈ€

@ludbek μš°λ¦¬λŠ” λ˜ν•œ κ·ΈλŸ¬ν•œ κΈ°λŠ₯을 λ†“μΉ˜κ³  이 κΈ°λŠ₯을 μœ„ν•œ ν”ŒλŸ¬κ·ΈμΈμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€:
https://github.com/tipsi/pytest-tipsi-django (μ‚¬μš©λ²•: https://github.com/tipsi/pytest-tipsi-django/blob/master/test_django_plugin/app/tests/test_transactions.py)
λ‹€μŒκ³Ό ν•¨κ»˜:
https://github.com/tipsi/pytest-tipsi-testing
νŠΈλžœμž­μ…˜μ„ μ€‘μ²©ν•˜κ³  μ‹€ν–‰/μ’…λ£Œ μˆœμ„œλ₯Ό μˆ˜μ •ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

@cybergrind λ‹΅λ³€ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” ν™•μ‹€νžˆ 그것을 ν™•μΈν•˜κ³  μ–΄λ–»κ²Œ λ˜μ—ˆλŠ”μ§€ μ•Œλ €μ€„ 것이닀.

이것은 Django의 UnitTest 클래슀 기반 ν…ŒμŠ€νŠΈμ—μ„œ pytest-django에 이λ₯΄λŠ” κ°€μž₯ 큰 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. Djangoμ—μ„œλŠ” setUpTestData λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°’λΉ„μ‹Ό DB μž‘μ—…μ„ ν•œ 번 μ‹€ν–‰ν•©λ‹ˆλ‹€(μ„Έμ…˜ λ²”μœ„μ˜ pytest κ³ μ • μž₯μΉ˜μ™€ 동일). 그리고 setUp obj.refresh_from_db() λ₯Ό μ‹€ν–‰ν•˜μ—¬ 클래슀 μ°Έμ‘°λ₯Ό μƒˆλ‘œ κ³ μΉ˜λŠ” κ΅ν™œν•œ 트릭이 μžˆμŠ΅λ‹ˆλ‹€.

DB λͺ¨λΈ μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ μƒμ„±ν•˜κ³  TCλ§ˆλ‹€ λ‹€μ‹œ λ‘œλ“œν•˜λ”λΌλ„ 각 ν…ŒμŠ€νŠΈ μ‚¬λ‘€μ—μ„œ μƒμ„±ν•˜λŠ” 것보닀 거의 항상 λΉ λ¦…λ‹ˆλ‹€.

κ°€λŠ₯ν•œ 경우 pytest-tipsi-django λ³‘ν•©λœ μ—…μŠ€νŠΈλ¦Όμ—μ„œ μ„Έμ…˜ λ²”μœ„ κ³ μ • μž₯치λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. 이 λ¬Έμ œμ™€ μ†”λ£¨μ…˜μ„ μ°ΎλŠ” 데 μ•½κ°„μ˜ νŒŒκ³ κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @paultiplady

pytest-tipsi-djanjo 의 μ ‘κ·Ό 방식이 $#$1 pytest #$ 에 λŒ€ν•œ 일반적인 ν…ŒμŠ€νŠΈ λͺ¨λΈμ— λ§žλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. κ°€μž₯ λˆˆμ— λ„λŠ” 차이점은 μ‘°λͺ…κΈ°μ˜ λ§ˆλ¬΄λ¦¬μž…λ‹ˆλ‹€. ν˜„μž¬ pytest λŠ” 더 넓은 λ²”μœ„μ˜ λΆˆν•„μš”ν•œ μ‘°λͺ…κΈ°λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λ§ˆλ¬΄λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ νŠΉμ • μˆœμ„œλ‘œ νŠΈλžœμž­μ…˜μ„ λͺ…μ‹œμ μœΌλ‘œ μ™„λ£Œν•΄μ•Ό ν•˜λ©° 일반적으둜 μ΄λŠ” 맀우 λ‹€λ₯Έ 효과λ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€(ν˜„μž¬ pytest λŠ” ν™œμ„± ν…ŒμŠ€νŠΈ 및 ν•΄λ‹Ή ν”½μŠ€μ²˜κ°€ 이λ₯Ό μ „ν˜€ μš”κ΅¬ν•˜μ§€ μ•Šλ”λΌλ„ ν”½μŠ€μ²˜λ₯Ό ν™œμ„± μƒνƒœλ‘œ μœ μ§€ν•  수 있음).

λ•Œλ•Œλ‘œ λͺ‡ 가지 큰 μ‹œλ‚˜λ¦¬μ˜€λ₯Ό ν…ŒμŠ€νŠΈν•΄μ•Ό ν•˜κ³  λŒ€κ·œλͺ¨ ν…ŒμŠ€νŠΈμ—μ„œ κΈ°μ‘΄ μˆ˜λ™ νŠΈλžœμž­μ…˜ 관리λ₯Ό μ•½κ°„ 더 λ‚˜μ€ κ³ μ • μž₯치둜 κ΅μ²΄ν–ˆκΈ° λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈμ˜ ν…ŒμŠ€νŠΈλ₯Ό 이 μ ‘κ·Ό λ°©μ‹μœΌλ‘œ λ³€κ²½ν•΄μ•Ό ν–ˆμ§€λ§Œ μ—¬μ „νžˆ μ£Όλ¬Έ ν…ŒμŠ€νŠΈμ— λŒ€ν•œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μ§€κΈˆ λ‹Ήμž₯은 그에 λŒ€ν•œ 단 ν•˜λ‚˜μ˜ μ†”λ£¨μ…˜λ§Œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μΌμ’…μ˜ FAQλ₯Ό λ¬Έμ„œν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

@cybergrind에 λŒ€ν•œ μΆ”κ°€ 정보에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 쑰금 더 파고 λ“€μ—ˆμ§€λ§Œ 였늘 μ‹œκ°„μ΄ λΆ€μ‘±ν•©λ‹ˆλ‹€. μ—¬κΈ°κΉŒμ§€ κ°€μ•Ό ν•©λ‹ˆλ‹€. 이 μ ‘κ·Ό 방식이 μœ μš©ν•œμ§€ 여뢀에 λŒ€ν•œ μ˜¨μ „ν•œ 확인을 ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. pytest 내뢀에 μ΅μˆ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ˜ν•œ "pytestλŠ” 더 넓은 λ²”μœ„μ˜ λΆˆν•„μš”ν•œ μ„€λΉ„λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 끝내지 μ•ŠμŠ΅λ‹ˆλ‹€"λΌλŠ” 말의 의미λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. μ’€ 더 ν™•μž₯ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ’…λ£Œμžλ₯Ό κ°€λ¦¬ν‚€λŠ” λ§μž…λ‹ˆκΉŒ? 그것은 λ‚΄κ°€ μ•„λž˜μ— μ“΄ λ‚΄μš©μ— 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€.

pytest-django ν”ŒλŸ¬κ·ΈμΈμ€ django_db ν‘œμ‹œλ₯Ό μ‚¬μš©ν•˜λ©° μ΄λŠ” plugin.py(https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/plugin.py)의 _django_db_markerμ—μ„œ μ²˜λ¦¬λ©λ‹ˆλ‹€. #L375), ν•¨μˆ˜ λ²”μœ„ db κ³ μ • μž₯치(https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/fixtures.py#L142)λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. 이 κ³ μ • μž₯μΉ˜λŠ” Django TestCaseλ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜κ³  _pre_setup _post_teardown λ₯Ό λŒ€κΈ°μ—΄μ— λ„£μŠ΅λ‹ˆλ‹€.

λͺ‡ 가지 μ˜΅μ…˜μ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

_django_db_marker λ₯Ό ν™•μž₯ν•˜μ—¬ μ„ νƒμ μœΌλ‘œ 클래슀 λ˜λŠ” μ„Έμ…˜μ„ μˆ˜ν–‰ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.
기본적으둜 db 와 λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€λ§Œ cls.setUpTestData λ˜λŠ” 마크 kwargs에 μ „λ‹¬λœ ν•¨μˆ˜μ™€ λ™μΌν•œ κΈ°λŠ₯을 ν˜ΈμΆœν•˜λŠ” λ²”μœ„ 섀정도 μžˆμŠ΅λ‹ˆλ‹€.

클래슀 λ²”μœ„μ˜ 경우, 그리고 μ„Έμ…˜ λ²”μœ„μ˜ κ²½μš°μ—λ„ μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ 이후에 DBλ₯Ό λ‘€λ°±ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ 기본적으둜 μ˜¬λ°”λ₯Έ μˆœμ„œλ‘œ νŠΈλ¦¬κ±°ν•˜κ³  각각 κ³ μœ ν•œ μ›μžμ„±μ„ μ„€μ •ν•˜λŠ” λ²”μœ„ 지정 κ³ μ • μž₯μΉ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€. 거래. λ‚˜λŠ” 이것이 μ˜†μ—μ„œ μ‹€ν–‰λ˜λŠ” λ³„λ„μ˜ κ³ μ • μž₯μΉ˜κ°€ μ•„λ‹ˆλΌ db κ³ μ • μž₯μΉ˜μ— λŒ€ν•œ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡κ²Œ ν•˜λ©΄ μ§€μ •λœ λͺ¨λ“  클래슀/μ„Έμ…˜ μˆ˜μ€€ 섀정을 μ˜¬λ°”λ₯΄κ²Œ νŠΈλ¦¬κ±°ν•˜κ³  ν•΄λ‹Ή 섀정은 클래슀/μ„Έμ…˜λ‹Ή ν•œ 번 ν˜ΈμΆœλ©λ‹ˆλ‹€. django_db_blocker.unblock() λ₯Ό μˆ˜λ™μœΌλ‘œ νŠΈλ¦¬κ±°ν•˜λŠ” μ„Έμ…˜ λ²”μœ„ ν•¨μˆ˜λ₯Ό μ„€μ •ν•˜λ©΄ django_db λ§ˆν¬κ°€ 첫 번째 νŠΈλžœμž­μ…˜μ„ μ„€μ •ν•œ 후에 λ°œμƒν•˜λŠ” κ²ƒμ²˜λŸΌ 보이기 λ•Œλ¬Έμ— 마크 μžμ²΄μ— λŒ€ν•œ μˆ˜μ •μ΄ ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이것은 λ‹€μŒκ³Ό 같이 보일 수 μžˆμŠ΅λ‹ˆλ‹€( plugin.py _django_db_marker() ):

    if marker:
        if marker.session_db:
            getfixturevalue(request, 'db_session')

        if marker.class_db:
            getfixturevalue(request, 'db_class')

        validate_django_db(marker)
        if marker.transaction:
            getfixturevalue(request, 'transactional_db')
        else:
            getfixturevalue(request, 'db')

이것은 미친 μ΄μ•ΌκΈ°μž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ 이 μŠ€λ ˆλ“œκ°€ 더 탐ꡬ할 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

마무리 κ΄€λ ¨: https://github.com/tipsi/pytest-tipsi-testing/blob/master/tests/test_finalization.py

이 ν…ŒμŠ€νŠΈλŠ” κΈ°λŠ₯ μˆ˜μ€€μ΄ μ•„λ‹Œ λ°μ΄ν„°λ² μ΄μŠ€ κ³ μ • μž₯μΉ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λͺ…μ‹œμ  μ’…λ£Œ μ—†μ΄λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그리고 이것은 pytest κ΅¬ν˜„μ— κ΄€ν•œ κ²ƒμ΄λ―€λ‘œ pytest-djangoμ—μ„œ μˆ˜μ •ν•˜κΈ° μœ„ν•΄ ν•  일이 μ—†μŠ΅λ‹ˆλ‹€.

#388 및 #33의 쀑볡

κ°μ‚¬ν•©λ‹ˆλ‹€. λ‹«μŠ΅λ‹ˆλ‹€.

33은 λ‹«ν˜€ 있고 #388μ—λŠ” 의미 μžˆλŠ” 토둠이 μ—†μŠ΅λ‹ˆλ‹€(이와 달리). @blueyed λ₯Ό λ‹«λŠ” 것이 이상해 λ³΄μž…λ‹ˆλ‹€. λ§Œμ•½ 무엇이든 #388을 λ‹«κ³  이것을 이 λ¬Έμ œμ— λŒ€ν•œ ν‘œμ€€ ν‹°μΌ“μœΌλ‘œ λ§Œλ“€ 것을 μ œμ•ˆν•©λ‹ˆλ‹€.

πŸ‘ κ°μ‚¬ν•©λ‹ˆλ‹€!

λ˜ν•œ 이 κΈ°λŠ₯을 맀우 높이 평가할 κ²ƒμž…λ‹ˆλ‹€.

@mkokotovich
μ–Όλ§ˆλ‚˜ 많이? 슀슀둜 μΌμ–΄λ‚˜κΈ°μ— μΆ©λΆ„ν•©λ‹ˆκΉŒ? ;)

μ–΄μ¨Œλ“ , μ—¬κΈ°μ˜ μ£Όμš” / 근본적인 문제(μ›λž˜ μ£Όμ„μ—μ„œ)λŠ” 이미 ν…ŒμŠ€νŠΈ 쀑에 DBκ°€ μž¬μ„€μ •λ˜λ―€λ‘œ μ„Έμ…˜ λ²”μœ„ κ³ μ • μž₯치λ₯Ό μ‚¬μš©ν•˜λŠ” κ°„λ‹¨ν•œ 방법이 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

κ·Έλž˜λ„ νš¨κ³Όκ°€ μžˆλŠ” 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

@pytest.fixture(scope="session")
def django_db_setup(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        with transaction.atomic():  # XXX: could/should use `TestCase_enter_atomics` for multiple dbs
            load_time_consuming_db_fixture()
            yield

λͺ¨λ“  것을 μΆ”κ°€ μ›μž λΈ”λ‘μœΌλ‘œ λ¬ΆλŠ”λ‹€λŠ” 아이디어. κ·ΈλŸ¬λ‚˜ 이것은 ν…ŒμŠ€νŠΈλ˜μ§€ μ•Šμ•˜μœΌλ©° μ‹€μ œλ‘œ 이λ₯Ό μœ„ν•΄ TransactionTestCase λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@paultiplady
κ·€ν•˜μ˜ μ˜κ²¬μ€ 쒋은 것 κ°™μŠ΅λ‹ˆλ‹€. 즉, AFAICSλ₯Ό μΆ”κ°€λ‘œ 탐색할 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€(이전 μ˜κ²¬λ„ μ°Έμ‘°).

@blueyed μš°λ¦¬λŠ” μ΄λŸ¬ν•œ μ ‘κ·Ό 방식을 1λ…„ 이상 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€(λͺ¨λ“  것을 μΆ”κ°€ μ›μž λΈ”λ‘μœΌλ‘œ 묢음). κ½€ 잘 μž‘λ™ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ pytestμ—λŠ” μ„Έμ…˜ μˆ˜μ€€(ν…ŒμŠ€νŠΈ μ΄μ™Έμ˜ λ‹€λ₯Έ μˆ˜μ€€)이 λ‹«νž 결정적인 μœ„μΉ˜κ°€ μ—†μœΌλ―€λ‘œ μ„œλ‘œλ₯Ό ν•„μš”λ‘œ ν•˜λŠ”μ§€ 여뢀에 관계없이 db νŠΈλžœμž­μ…˜μ˜ 쒅속성을 좔적해야 ν•©λ‹ˆλ‹€. .
λ”°λΌμ„œ λ‹€μŒ ν…ŒμŠ€νŠΈ 전에 νŠΈλžœμž­μ…˜ μŠ€νƒμ„ λͺ…μ‹œμ μœΌλ‘œ μΆ”μ ν•˜κ³  μ€‘μ²©λœ νŠΈλžœμž­μ…˜μ„ λ‹«μ•„μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/tipsi/pytest-tipsi-django/blob/master/pytest_tipsi_django/django_fixtures.py#L46

μ£„μ†‘ν•©λ‹ˆλ‹€. λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆλ‹€κ³  μƒκ°ν•˜κΈ° λ•Œλ¬Έμ— λͺ…ν™•νžˆ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ db 객체 생성에 μ˜μ‘΄ν•˜λŠ” μ‘°λͺ…κΈ°λ₯Ό λ§Œλ“€κ³  μ‹Άλ‹€λ©΄ ν•  수 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

@pytest.mark.django_db(transaction=True)
@pytest.fixture(scope="session")
def object():
    object = Object.create_object(params)
    yield object
    // or alternatively
    object = mixer.blend('myObject')
    yield object

κ·ΈλŸ¬λ‚˜ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μ‹€ν–‰ μ‹œ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰