ОШИБКА test/test_user_endpoints.py::test_create_user — RuntimeError: Должен быть установлен либо «SQLALCHEMY_DATABASE_URPython

Программы на Python
Anonymous
ОШИБКА test/test_user_endpoints.py::test_create_user — RuntimeError: Должен быть установлен либо «SQLALCHEMY_DATABASE_UR

Сообщение Anonymous »

Хорошо, я перепробовал все, чтобы заставить pytest работать с Docker, но мне не удалось его запустить.
У меня есть отдельный контейнер для тестирования в Docker:

Код: Выделить всё

    partneraccountstest:
container_name: partner-accounts-tests
build: ../partner-accounts-py
#ports:
#- "81:6000"
volumes:
- ../partner-accounts-py:/app:delegated
environment:
- FLASK_ENV=testing
- FLASK_APP=wsgi.py
- TEST_DATABASE_URL=sqlite:///:memory
networks:
- default
command: pytest
Тогда в моем приложении есть config.py:

Код: Выделить всё

class ProductionConfig():
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
SECRET_KEY = os.environ.get('SECRET_KEY')

class DevelopmentConfig():
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL')
SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = True

class TestConfig():
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL', 'sqlite:///:memory:')
SECRET_KEY = os.environ.get('SECRET_KEY', 'default_secret_key')

config_by_name = dict(
development=DevelopmentConfig,
production=ProductionConfig,
testing=TestConfig
)

def get_config(env):
return config_by_name.get(env, DevelopmentConfig)
Итак, в моем каталоге /tests я создал conftest.py

Код: Выделить всё

@pytest.fixture(scope='module')
def app():
app = init_app()

# Ensure you load the correct config for testing
app.config.from_object(get_config('testing'))
print(f"Loaded config: {app.config['SQLALCHEMY_DATABASE_URI']}")
with app.app_context():
db.create_all()
yield app
db.session.remove()
db.drop_all()
И вот, наконец, у меня есть тест

Код: Выделить всё

import pytest
from tests.conftest import client, mock_token

def test_create_user(client, mock_token):
user = {
"first_name": "Bob",
"last_name": "Hope",
"email": "bob.hope@partneraccount.com",
"country": "Canada",
"job_title": "Owner"
}

response = client.post('/users/create', json=user)
json_data = response.get_json()

assert response.status_code == 200
assert json_data['result']['first_name'] == "Bob"

from application.models.user import User
new_user = User.query.filter_by(email='bob.hope@partneraccount.com').first()
assert new_user is not None
assert new_user.first_name == 'Bob'
Также для контекста я использую init.py в папке приложения, и именно так я создаю приложение

Код: Выделить всё

def init_app():
app = Flask(__name__, instance_relative_config=False)

app.config.from_object(get_config('development'))
db.init_app(app)
ma.init_app(app)
migration.init_app(app, db)
cors.init_app(app)

with app.app_context():
from application.blueprints.users import user_blueprint

app.register_blueprint(user_blueprint)

return app

Думаю, это все, и я все попробовал


Подробнее здесь: https://stackoverflow.com/questions/790 ... either-sql

Вернуться в «Python»