1

我使用事務燈具在MINITEST,我的測試運行成功(和通過)當我第一次運行它們:使用Rails Minitest,測試如何通過但在重新測試時失敗?

rake test test/models/number_test.rb 
Run options: --seed 31462 
# Running: 
.. 
Finished in 0.271344s, 7.3707 runs/s, 7.3707 assertions/s. 
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips 

然而,當我馬上再次運行,他們會失敗:

rake test test/models/number_test.rb 
Run options: --seed 22968 
# Running: 
EE 
Finished in 0.058652s, 34.0997 runs/s, 0.0000 assertions/s. 

    1) Error: 
    NumberTest#test_to_param_is_number: 
    ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "calls" violates foreign key constraint "fk_calls_extension_id" 
    DETAIL: Key (extension_id)=(760421015) is not present in table "extensions". 
    : COMMIT 

    2) Error: 
    NumberTest#test_twilio's_API_is_configured_to_come_to_this_number's_URL: 
    ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: insert or update on table "calls" violates foreign key constraint "fk_calls_extension_id" 
    DETAIL: Key (extension_id)=(760421015) is not present in table "extensions". 
    : COMMIT 

2 runs, 0 assertions, 0 failures, 2 errors, 0 skips 

我正在使用schema_plus gem將外鍵添加到我的表中。

由於燈具按字母順序裝載,因此我使用deferrable: :initially_deferred選項,該選項僅在事務結束時執行參照完整性檢查,因此所有數據都將在檢查之前加載到所有表中。這就是測試第一次運行的原因......但是我不確定爲什麼它在第二次運行中有什麼不同。

運行重新測試時,是不是應該清空所有數據庫表並且使用可延期選項重新加載固件?這就像延遲是第一次沒有兌現。

爲了得到它的工作,我總是必須在運行測試之間運行rake db:reset,這似乎很瘋狂。

更新1:如果我註釋掉爲calls所有的燈具(實際上什麼都沒有做,在number_test.rb任何測試),一切工作正常…我可以像我喜歡的那樣經常重新運行數字測試,並且他們仍然通過。所以,這似乎與延期有關。

回答

1

這是一個真正的參照完整性問題。 numberscalls最終都鏈接回users

原來,users夾具在測試服務器上不存在。那會做。

0

Rails將嘗試禁用數據庫中的約束觸發器來清除它。你需要讓超級用戶來完成這個任務。這樣做:

我進入sudo -u postgres psql和類型:

ALTER USER yourdbusername SUPERUSER; 
相關問題