flask test_client()unittest

时间:2016-01-03 17:14:03

标签: flask flask-sqlalchemy

我是编程的新手,这是我在python中的第一个web应用程序(flask,sqlalchemy,wtforms等)。我一直在使用realpython.com课程2作为我关于这个主题的学习材料。我已经到了我正在学习单元测试的地步,我无法让它正常工作。我将课程示例与我在网上找到的示例进行了比较,但我没有看到我的代码存在问题。

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

  

OperationalError:(sqlite3.OperationalError)没有这样的表:customer [SQL:u&#39; INSERT INTO customer(name,email,telephone,created_date)VALUES(?,?,?,?)&#39;] [参数:(&#39; Acme Company&#39;,&#39; acme@domain.com',&#39; 6125551000&#39;,&#39; 2016-01-03&#39;)] < / p>

我不确定如何解决此问题。我做了很多凝视和比较,我没有看到差异。

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()

我将需要粘贴大量代码,以便显示所有依赖项。你可以在这里找到源代码。

https://github.com/ande0581/madsenconcrete

由于

1 个答案:

答案 0 :(得分:0)

最终,问题在于已经配置app的{​​{3}}:

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

如果您使用you are creating your db object(在the create_app pattern中有更详细的说明),您将能够更改为测试应用程序加载的配置。