我使用事務燈具在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
任何測試),一切工作正常…我可以像我喜歡的那樣經常重新運行數字測試,並且他們仍然通過。所以,這似乎與延期有關。