Код: Выделить всё
from fastapi import FastAPI
from pydantic import BaseSettings
app = FastAPI()
class Settings(BaseSettings):
ENVIRONMENT: str
class Config:
env_file = ".env"
case_sensitive = True
settings = Settings()
databases = {
"dev": "Development",
"test": "Testing"
}
database = databases[settings.ENVIRONMENT]
@app.get("/")
def read_root():
return {"Environment": database}
Код: Выделить всё
ENVIRONMENT=dev
Моя идея заключалась в следующем (
Код: Выделить всё
test.pyКод: Выделить всё
import pytest
from fastapi.testclient import TestClient
from main import app
@pytest.fixture(scope="session", autouse=True)
def test_config(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")
@pytest.fixture(scope="session")
def client():
return TestClient(app)
def test_root(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Environment": "Testing"}
Кроме того, я получаю эту ошибку:
Код: Выделить всё
ScopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'session' scoped request object, involved factories
test.py:7: def test_config(monkeypatch)
env\lib\site-packages\_pytest\monkeypatch.py:16: def monkeypatch()
Из-за этого я пытался использовать определенные переменные тестовой среды: https://pydantic-docs.helpmanual. io/usage/settings/#field-value-priority.
Честно говоря, я запутался, моя единственная реальная цель — иметь другую тестовую конфигурацию (в так же работает Flask: https://flask.palletsprojects.com/en/1. ... d-fixtures). Я подхожу к проблеме неправильно?
Подробнее здесь: https://stackoverflow.com/questions/615 ... in-fastapi
Мобильная версия