【发布时间】:2018-06-08 23:16:37
【问题描述】:
我正在将 Flask 应用程序的测试从 unittest 移植到 pytest。对于需要数据库的测试,我添加了一个返回数据库会话的夹具
DB 是一个运行 PostgreSQL 数据库的 SQLAlchemy 对象
import pytest
from app import create_app, db
from app.models import Project, Client
@pytest.fixture(scope='function')
def db_session():
app = create_app('testing')
app_context = app.app_context()
app_context.push()
db.create_all()
yield db.session
db.session.remove()
db.drop_all()
app_context.pop()
def test_getJson_withOneProjectSet_returnsBasicClientJson(db_session):
testClient = Client()
db_session.add(testClient)
testProject = Project()
db_session.add(testProject)
testClient.projects.append(testProject)
db_session.commit()
clientJson = testClient.getJson()
assert len(clientJson['projects']) == 1
def test_getJson_withThreeProjectsSet_returnsBasicClientJson(db_session):
testClient = Client()
db_session.add(testClient)
testProject1 = Project()
db_session.add(testProject1)
testProject2 = Project()
db_session.add(testProject2)
testProject3 = Project()
db_session.add(testProject3)
testClient.projects.append(testProject1)
testClient.projects.append(testProject2)
testClient.projects.append(testProject3)
db_session.commit()
clientJson = testClient.getJson()
assert len(clientJson['projects']) == 3
运行测试时,第一个通过但第二个返回完整性错误:sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key value violates unique constraint "project_code_key"
显然在完成测试功能后数据库没有清理
fixture 是来自工作单元测试设置/拆卸功能的端口,没有完整性错误问题:
# def setUp(self):
# self.app = create_app('testing')
# self.app_context = self.app.app_context()
# self.app_context.push()
# db.create_all()
#
# def tearDown(self):
# db.session.remove()
# db.drop_all()
# self.app_context.pop()
【问题讨论】:
标签: python postgresql flask flask-sqlalchemy pytest