Pytest- Flask Невозможно импортировать имя 'create_app' - PullRequest
0 голосов
/ 19 июня 2020

Пытаюсь запустить базовый c функциональный тест с pytest- flask, но продолжаю получать эту ошибку:

    tests/conftest.py:2: in <module>
    from learning_flashcards import create_app
E   ImportError: cannot import name 'create_app'

Вот моя структура каталогов:

.
├── Procfile
├── __pycache__
├── config.py
├── learning_flashcards
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── app.cpython-36.pyc
│   │   └── views.cpython-36.pyc
│   ├── app.py
│   ├── db.py
│   ├── models.py
│   ├── static
│   │   └── style.css
│   ├── templates
│   └── views.py
├── learning_flashcards.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── requires.txt
│   └── top_level.txt
├── manage.py
├── migrations
│   ├── README
│   ├── alembic.ini
│   ├── env.py
│   ├── script.py.mako
│   └── versions
├── requirements
│   ├── common.txt
│   ├── dev.txt
│   └── runtime.txt
├── requirements.txt
├── setup.py
├── tests
│   ├── __pycache__
│   │   ├── conftest.cpython-36-pytest-5.4.3.pyc
│   │   ├── test_data.cpython-36-pytest-5.4.3.pyc
│   │   └── test_site.cpython-36-pytest-5.4.3.pyc
│   ├── conftest.py
│   ├── test_data.py
│   └── test_site.py
└── venv

И вот мой файл conftest.py:

import pytest

from learning_flashcards import create_app

@pytest.fixture
def app():
    app = create_app()
    return app

Пробовали различные способы изучения системы импорта (из .learning_flashcards, из .learning_flashcards.learning_flashcards и др. c.), также исследовали файл инициализации чтобы увидеть, правильно ли он создает экземпляр приложения, но, похоже, все в порядке. Приложение работает на локальном сервере, но не может заставить работать набор тестов.

Вот init .py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

import learning_flashcards.views
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres@localhost/flashcards'

db = SQLAlchemy()

И app.py:

from flask import Flask
from models import db

def create_app():
    app = Flask(__name__)

    db.init_app(app)

    @app.route('/')
    def learning_flashcards():
        return "Hello World!"



    POSTGRES = {
        'user': 'postgres',
        'pw': 'password',
        'db': 'my_database',
        'host': 'localhost',
        'port': '5432',
    }
    app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://%(user)s:%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES

    return app

if __name__ == '__main__':
    app = create_app()
    app.run()
...