3

我正在尝试为一个简单的 Flask 应用程序编写测试。项目结构如下:

app/
    static/
    templates/
    forms.py
    models.py
    views.py
migrations/
config.py
manage.py
tests.py

测试.py

import unittest
from app import create_app, db
from flask import current_app
from flask.ext.testing import TestCase

class AppTestCase(TestCase):
    def create_app(self):
        return create_app('test_config')

    def setUp(self):
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_hello(self):
        response = self.client.get('/')
        self.assert_200(response)

应用程序/初始化.py

# 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 失败,因为 response.status_code 是 404。请告诉我,我该如何解决?看来,该应用程序实例对views.py 中的视图函数一无所知。如果它需要整个代码,可以在这里找到

4

1 回答 1

2

您的文件挂载文件中创建views.py的路由。app__init__.py

create_app您必须在测试方法中将这些路由绑定到您创建的应用程序。

我建议您反转依赖关系。相反,views.py导入您的代码,您可以从您的或从测试文件init_app中导入和调用。__init__.py

# views.py
def init_app(app):
    app.add_url_rule('/', 'index', index)
    # repeat to each route

使用Blueprint可以做得更好。

def init_app(app):
    app.register_blueprint(blueprint)

这样,您的测试文件只需导入此文件init_app并将蓝图绑定到测试app对象。

于 2016-04-22T21:54:49.170 回答