인프런 커뮤니티 질문&답변

pplkjh2님의 프로필 이미지
pplkjh2

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

13-14 API 테스트 코드 작성 (Feat. pytest) #1 - pytest 설정 및 Factory, Fixture 구현

13-14 pytest 코드 실행 오류

작성

·

31

·

수정됨

0

  • 질문을 온전히 이해할 수 있도록, 모든 맥락을 전달해주세요.

  • 질문은 질문자가 번거로워야 보다 좋은 답변을 얻으실 수 있습니다.

  • 시행착오를 알려주시면 곧바로 원하는 문제에 집중할 수 있습니다.

  • 오류 메시지는 일부만 알려주시기보다 전체 오류 메시지를 캡처해서 주시면, 오류 파악에 도움이 됩니다.

     

당신의 파이썬/장고 페이스메이커가 되겠습니다. ;-)


인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

postgresql 을 다른 서버에 연결하여 사용중인데요.

runserver 시에는 정상 작동하나 강사님이 올려주신 pytest를 똑같이 설정하고 실행하면, schema가 없어서 table을 생성할 수 없다는 오류가 발생합니다.

MigrationSchemaMissing("Unable to create the django_migrations table 

일단은 settings.py를 sqlite3로 변경하여 정상 작동은 시켰는데요 어떻게 수정할 수 있을까요?

 

 


또한 올려주신 소스코드에서

import factory
from accounts.models import User


class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User
        django_get_or_create = ("username",)

    username = factory.Sequence(lambda n: f"user{n}")
    email = factory.LazyAttribute(lambda user: f"{user.username}@example.com")

    # UserFactory 인스턴스 생성 시에, 암호 입력을 지원하기 위함
    # raw_password 필드가 아니라 password 필드로 지정하면, 암호화없이 입력값 그대로 저장됩니다.
    raw_password = factory.Faker("password")

    @classmethod
    def _create(cls, model_class, *args, **kwargs):
        # raw_password 필드값을 암호화하여 password 필드에 저장합니다.
        # User 모델에는 raw_password 이름의 필드가 없으므로 kwargs 사전에서 제거해줘야만 합니다.
        raw_password = kwargs.pop("raw_password", None)
        if raw_password:
            kwargs["password"] = make_password(raw_password)

        return super()._create(model_class, *args, **kwargs)

make_password 부분이 import 되어 있지 않습니다. git에서는 수정되어 있는 모양인데 참고 부탁드립니다.

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

장고 테스트에서는 settings.DATABASES["default"]의 "NAME"에 지정한 데이터베이스를 사용하지 않고, 이 이름에 접두어 "test_"를 붙인 데이터베이스를 디폴트 테스트 데이터베이스로 사용합니다.

이는 테스트 시에 서비스 데이터를 변경하지 않기 위함이고, 테스트를 수행할 때마다 매번 데이터베이스를 새롭게 생성해서, 원본 데이터베이스와 독립적인 테스트 환경을 유지합니다

지정하신 PostgreSQL 서버에서 test 데이터베이스 생성권한이 없거나, test 데이터베이스에서 데이터베이스 테이블 생성 권한이 없어서 발생하는 이슈 같습니다. 해당 PostgreSQL 서버에 test_ 접두어를 붙인 데이터베이스를 생성하신 후에 테스트를 수행해보시면 어떤가요?

혹은 settings.DATABASES["default"]에 "NAME" 외에 "TEST" 항목으로 { "NAME": "원하시는_TEST_데이터베이스이름" } 지정하시어, 원하는 테스트 데이터베이스 이름을 지정하실 수도 있습니다.

관련 문서 : https://docs.djangoproject.com/en/5.1/topics/testing/overview/#the-test-database

살펴보시고, 댓글 부탁드립니다. :-)

pplkjh2님의 프로필 이미지
pplkjh2

작성한 질문수

질문하기