簡體   English   中英

pytest Flask-SQLAlchemy 會話中的完整性錯誤

[英]Integrity error in pytest Flask-SQLAlchemy session

我正在將 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"

顯然,完成測試功能后沒有清理數據庫

該夾具是來自工作單元測試設置/拆卸功能的端口,它沒有完整性錯誤問題:

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

嘗試將 scope="module" 而不是 function,scope module 意味着將此數據庫用於所有測試,然后將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM