Flask 烧瓶测试\客户端()单元测试

Flask 烧瓶测试\客户端()单元测试,flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,一般来说,我不熟悉编程,这是我第一次使用python(flask、sqlalchemy、wtforms等)编写web应用程序。我一直在使用realpython.com课程2作为关于这个主题的学习材料。我已经到了学习单元测试的地步,我很难让它正常工作。我已经将课程示例与我在网上找到的示例进行了比较,我没有发现代码中存在的问题 我遇到的问题是test.py脚本正确地创建了我的test.db数据库,但当它尝试插入一个测试客户并将其放入我的生产数据库(madsenconcrete.db)而不是我的测试数

一般来说,我不熟悉编程,这是我第一次使用python(flask、sqlalchemy、wtforms等)编写web应用程序。我一直在使用realpython.com课程2作为关于这个主题的学习材料。我已经到了学习单元测试的地步,我很难让它正常工作。我已经将课程示例与我在网上找到的示例进行了比较,我没有发现代码中存在的问题

我遇到的问题是test.py脚本正确地创建了我的test.db数据库,但当它尝试插入一个测试客户并将其放入我的生产数据库(madsenconcrete.db)而不是我的测试数据库(test.db)时。如果我从脚本目录中删除生产数据库,它将在找不到该数据库时引发此错误,因为它正在查找madsenconcrete.db而不是test.db

OperationalError:(sqlite3.OperationalError)没有这样的表:customer[SQL:u'插入到customer(姓名、电子邮件、电话、创建日期)值(?、、?、?)'][参数:('Acme Company','acme@domain.com“,”6125551000“,”2016-01-03“)]

我不知道如何解决这个问题。我做了很多凝视和比较,我看不出有什么不同

import os
import unittest
import datetime
import pytz

from views import app, db
from _config import basedir
from models import Customer


TEST_DB = 'test.db'


class AllTests(unittest.TestCase):
    ############################
    #### setup and teardown ####
    ############################

    # executed prior to each test
    def setUp(self):
        app.config['TESTING'] = True
        app.config['WTF_CSRF_ENABLED'] = False
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, TEST_DB)
        app.config['SQLALCHEMY_ECHO'] = True
        self.app = app.test_client()
        db.create_all()

    # executed after each test

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

    # each test should start with 'test'
    def test_customer_setup(self):
        new_customer = Customer("Acme Company", "acme@domain.com", "6125551000",
                                datetime.datetime.now(pytz.timezone('US/Central')))
        db.session.add(new_customer)
        db.session.commit()


if __name__ == "__main__":
    unittest.main()
我必须粘贴大量代码,以便显示所有依赖项。你可以在这里找到源代码


谢谢

归根结底,问题在于已经配置的
应用程序

# config
app = Flask(__name__)
app.config.from_object('_config')
db = SQLAlchemy(app)

如果使用(在中有更详细的说明),您将能够更改为测试应用程序加载的配置。

我认为您没有连接到您认为是的数据库
db=SQLAlchemy(app)
发生在您将URI设置到测试数据库之前很久。您确定您的代码与教程匹配吗?也许您需要在设置中调用
db.init\u app(app)
。这门课不是公开的,所以很难知道你错过了什么。谢谢你的回复。我的代码不再与课程匹配。我把这门课作为一个框架,现在我正试图扩展他们演示的项目。课程源代码可以在这里找到。我不确定我是否遵守了你关于不使用正确数据库的说法,但这对我来说太多了,我不确定我是否正确掌握了导入和继承。嗨,我被困在了完全相同的地方。你让它起作用了吗?你做了什么?@JeffA我想起来了。在运行测试之前,我必须每次运行
db_create.py
,然后它才能正常工作。否则就不行了。也许我以后会在课程中遇到这个问题,原因是什么。谢谢你的帮助。我仍然不完全确定如何实现这一点,我的课程工作中正在制定蓝图。我尝试了一个改变,使我的脚本与示例一致,它解决了我的问题。我不知道为什么。我所做的要点是:从表单导入LoginForm、AddCustomPerform、AddAddressForm、AddJournalForm、AddBidForm、AddServiceForm、\AddBidItemForm、EditBidForm到脚本的顶部,然后再到我的flask应用程序配置和数据库查询等辅助功能的下方。