[英]Flask-testing - why the test does fail
我正在尝试为一个简单的 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 中的视图函数一无所知。 如果需要完整的代码,可以在这里找到
您的views.py
文件在您的__init__.py
文件中创建的app
安装路由。
您必须在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
对象即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.