У меня есть отдельный контейнер для тестирования в 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
Код: Выделить всё
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)
Код: Выделить всё
@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'
Код: Выделить всё
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