Колба, коллизии и Pytest - PullRequest
       6

Колба, коллизии и Pytest

0 голосов
/ 21 ноября 2018

Я использую Flask Blueprints для создания приложения.Я проверяю это с pytest.Генерация test_client в разных состояниях с pytest.fixture вызывает коллизию имени проекта.

Это мой код Flask __init__:

from flask import Flask
from flask_dropzone import Dropzone
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_user import UserManager
from flask_googlemaps import GoogleMaps
import os
from app.settings import app, db

# get extensions
dropzone = Dropzone()
google_maps = GoogleMaps()
migrate = Migrate()

def create_app(config_class=Config):

    # initialise extensions
    google_maps.init_app(app)
    dropzone.init_app(app)
    db.init_app(app)
    migrate.init_app(app, db)

    # FLASK-User Stuff
    from app.models import User
    user_manager = UserManager(app, db, User)

    from app.errors import bp as errors_bp
    app.register_blueprint(errors_bp)

    from app.main import bp as main_bp
    app.register_blueprint(main_bp)

    return app

Затем я пытаюсь использовать несколько pytests для тестирования различных аспектов приложения.Для каждого я создаю pytest.fixture для генерации test_client.Например, я создаю два прибора для тестирования приложения с использованием базы данных в разных состояниях.

Например.

@pytest.fixture(scope='module')
def client_state1():
    app = create_app()
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + PATH_TO_DB_STATE_1
    app.config['TESTING'] = True
    client = app.test_client()
    ctx = app.app_context()
    ctx.push()

    yield client

    ctx.pop()

@pytest.fixture(scope='module')
def client_state2():
    app = create_app()
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + PATH_TO_DB_STATE_2
    app.config['TESTING'] = True
    client = app.test_client()
    ctx = app.app_context()
    ctx.push()

    yield client

    ctx.pop()


def test_with_state1(client_state1):
"""Test should pass"""
assert 1 == 1

def test_with_state2(client_state2):
"""Test should pass"""
assert 1 == 1

При запуске тестов я получаю следующую ошибку.

AssertionError: A blueprint's name collision occurred between <flask.blueprints.Blueprint object at 0x1a16b5d4e0> and <flask.blueprints.Blueprint object at 0x1a1633f6a0>.  Both share the same name "googlemaps".  Blueprints that are created on the fly need unique names.

Я попытался разбить тесты на отдельные файлы и настроить область действия прибора.Но безрезультатно.Во всех случаях первый тест проходит, а второй вызывает столкновение.Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...