我是编程的新手,这是我在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
由于
答案 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中有更详细的说明),您将能够更改为测试应用程序加载的配置。