3.0 KiB
3.0 KiB
SQLite ARRAY 타입 문제 해결 가이드
문제 원인
- PostgreSQL의
ARRAY타입은 SQLite에서 지원되지 않습니다 Item모델의hashtags필드가ARRAY(String(30))타입으로 정의되어 있어 에러 발생
해결 방법
방법 1: Mock만 사용하는 간단한 테스트 (권장)
# simple 옵션으로 실행 (데이터베이스 없이 Mock만 사용)
./run-tests.sh simple
# 또는 특정 테스트만
./run-tests.sh auth
방법 2: 수동으로 conftest 변경
# 간단한 conftest 사용
cp tests/conftest_simple.py tests/conftest.py
# 테스트 실행
poetry run pytest tests/api/v1/test_auth.py -v
# 원래대로 복원
git checkout tests/conftest.py
방법 3: PostgreSQL 테스트 데이터베이스 사용
# PostgreSQL 설치 (Ubuntu)
sudo apt-get install postgresql postgresql-contrib
# 테스트 데이터베이스 생성
sudo -u postgres createdb test_o2sound
# 환경변수 설정
export TEST_DATABASE_URL="postgresql://postgres:password@localhost/test_o2sound"
# conftest.py 수정하여 PostgreSQL 사용
방법 4: 특정 모델 테스트 제외
# 데이터베이스 관련 테스트 제외하고 실행
poetry run pytest tests/ -v \
--ignore=tests/test_database_integration.py \
--ignore=tests/test_integration_scenarios.py
빠른 실행 명령어
API 테스트만 실행 (Mock 사용)
# 인증 API 테스트
poetry run pytest tests/api/v1/test_auth.py -v -k "not database"
# 사용자 API 테스트
poetry run pytest tests/api/v1/test_user.py -v
# 모든 API 테스트 (데이터베이스 제외)
poetry run pytest tests/api/ -v
환경별 실행
# 개발 환경 (Mock만 사용)
TESTING=1 poetry run pytest tests/api/v1/test_auth.py -v
# CI/CD 환경
docker run --rm -v $(pwd):/app python:3.12 sh -c "cd /app && pip install pytest && pytest tests/"
영구적인 해결책
1. 테스트용 모델 생성
# tests/models.py
from sqlalchemy import Column, String, Text
from app.domain.models.base import BaseModel
class TestItem(BaseModel):
__tablename__ = "test_items"
name = Column(String, nullable=False)
hashtags = Column(Text) # JSON으로 저장
2. 조건부 import
# app/domain/models/item.py
import os
from sqlalchemy import Column, String
from sqlalchemy.dialects.postgresql import ARRAY
if os.getenv('TESTING'):
from sqlalchemy import Text as ARRAY_TYPE
else:
ARRAY_TYPE = ARRAY(String(30))
class Item(BaseModel):
hashtags = Column(ARRAY_TYPE, nullable=True)
추천 워크플로우
-
로컬 개발: Mock만 사용하는 간단한 테스트
./run-tests.sh auth -
CI/CD: PostgreSQL 도커 컨테이너 사용
services: postgres: image: postgres:15 env: POSTGRES_PASSWORD: test -
통합 테스트: 실제 PostgreSQL 사용
docker-compose up -d postgres pytest tests/ --integration