Найти - Пользователи
Полная версия: Flask тестирование приложения
Начало » Web » Flask тестирование приложения
1
Stright
Здравствуйте, пытаюсь написать тесты для простого приложения на Flask.
Структура проекта:
app/
static/
templates/
forms.py
models.py
views.py
migrations/
config.py
manage.py
tests.py
Методы setUp и tearDown у меня такие же, как и в учебном проекте из книги Мигеля Гринберга
# tests.py
import unittest
from app import create_app, db
from flask import current_app
class TestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('test_config')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
        self.client = self.app.test_client()
    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()
    def test_app_exists(self):
        self.assertFalse(current_app is None)
    def test_hello(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

# config.py
class Config(object):
    SECRET_KEY = os.environ.get('COURSES_PROJECT_SECRET_KEY')
    SQL_COMMIT_ON_TEARDOWN = True
 
    @staticmethod
    def init_app(app):
        pass
class DevConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('COURSES_PROJECT_DATABASE')
class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_COURSES_PROJECT_DATABASE')
    CSRF_ENABLED = False
config = {'default': DevConfig,
          'dev_config': DevConfig,
          'test_config': TestingConfig}
# app/__init__.py
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
db = SQLAlchemy()
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    db.init_app(app)
    return app
app = create_app('default')
from . import views
Когда запускаю тесты, то test_hello проваливается из-за возврата 404 кода ответа. В чем может быть ошибка?Возможно это связано с тем, что экземпляр приложения в методе setUp ничего не знает о вьюхах? Хотя, вроде, все делаю, как в учебном примере.
4kpt_IV
Господи. Зачем. Есть же модуль flask-testing
Ссылочка
Stright
Спасибо А все-таки почему не проходит тест test_hello? Мое предположение верно?
Просто хочется разобраться, потому что, если не получается, значит чего-то недопонимаю
Stright
Вроде как разобрался, в учебном примере используюся блюпринты, которые регистрируются внутри фабричной функции create_app, поэтому экземпляр Flask в setUp методе содержит информацию об url и вьюхах. В моем же случае, блюпринты не используются, и в self.app этих данных нет.
ayb
А почему в create_app не прицепить вьюхи ? Какой толк от инстанса фласка без вьюх ?
Stright
Толк был, пока я не начал тесты писать, во views.py я добавлял url как полагается через декораторы app.route, но когда дело дошло до тестов, то обнаружил, что в инстансе, который создается в setUp, нет никакой информации о вьюхах. Пробовал прицепить к app вьюхи в create_app, но тогда появляются проблемы с циклическим импортом, остановился на варианте с регистрацией блюпринтов в create_app, там вообще никаких проблем.
4kpt_IV
Чистый app.route без блупринтов еще то зло. Особенно хак с обходом циклического импорта…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB