簡體   English   中英

帶有遷移運行的pytest-django忽略數據庫觸發器

[英]pytest-django run with migrations ignores database triggers

我的Django應用程序依賴於具有某些觸發器設置的數據庫。 我使用文檔的這一部分在pytest運行程序的測試數據庫中設置觸發器。

@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        cur = connection.cursor()
        cur.execute([...])  # Set it up

我使用--nomigrations運行測試,它可以按預期運行。 如果沒有--nomigrations (測試首先運行遷移),則觸發器不起作用。

因此,我嘗試調試

  1. 夾具運行 ,因此,觸發器
  2. 在我的測試開始暫停在調試器執行,我可以證實, 創建觸發器和存在於測試數據庫(通過運行psql test_<mydb>並在尋找pg_trigger表)
  3. 暫停夾具內部的執行,我可以確認遷移是在夾具之前進行的。 因此,遷移可能會為我設置觸發器,並且可能做錯了,但是固定裝置會刪除所有觸發器並重新創建它們
  4. 卸下固定裝置並進行遷移無法提供任何新結果。 因此,沒有理由認為固定裝置是問題所在。 這似乎僅是由於正在運行遷移

讓我再次強調一下, 在不進行遷移的情況下運行時測試通過了,在對我的dev db運行dev服務器時測試了功能,我也可以確認它是否有效

因此,我的問題是:使用遷移進行操作應該有什么不同的理由嗎? 還是我的遷移所做的事情晦澀難懂,導致事情失敗,即是我自己的錯?

將觸發器放在django_db_setup對我django_db_setup

@pytest.fixture(scope='session')
def django_db_setup(django_db_setup, django_db_blocker):
    with django_db_blocker.unblock():
        cur = connection.cursor()
        cur.execute('''CREATE TRIGGER search_vector_update BEFORE INSERT OR UPDATE
            ON xml_templates_template FOR EACH ROW EXECUTE PROCEDURE
            tsvector_update_trigger(search_vector, 'pg_catalog.english', name, description, info);
        ''')

pytest(4.4.1)使用--nomigrations運行

暫無
暫無

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

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