我有一個Rails 3應用程序,我正在試圖編寫一個測試用例?當測試用例加載時,我可以看到它正在創建與數據庫中的燈具對應的對象。但是,如果我更改測試用例中的對象或創建另一個對象,則它們不會反映在數據庫中。此外,如果我找到正確發生的新創建的對象。在Rails中測試數據庫中未反映的對象的更改?
這裏發生了什麼?另外,我怎樣才能獲得更改以反映在數據庫中?
我有一個Rails 3應用程序,我正在試圖編寫一個測試用例?當測試用例加載時,我可以看到它正在創建與數據庫中的燈具對應的對象。但是,如果我更改測試用例中的對象或創建另一個對象,則它們不會反映在數據庫中。此外,如果我找到正確發生的新創建的對象。在Rails中測試數據庫中未反映的對象的更改?
這裏發生了什麼?另外,我怎樣才能獲得更改以反映在數據庫中?
在您的test_helper.rb中,use_transactional_fixtures選項可能設置爲true
。這意味着每個測試都包裝在數據庫事務中。一個事務(在MySQL InnoDB中)必須用「COMMIT」來持久化。 rails測試框架只是沒有這樣做,所以你的數據庫在每次測試後都處於新的狀態。因此,您的更改會回滾。
事務內的更改只能通過啓動它的數據庫連接從外部(在您的案例中爲rails db
命令)看到它們不會顯示。
我希望這會有所幫助。
你可以分享你的測試用例嗎? – moritz
測試用例是非常簡單的:在這裏面我做 blog.url =「http://newval.com」 blog.save 調試 #我看在數據庫和新的價值並不能反映 – akshat
雖然在調試器,blog.errors.full_messages給你什麼?你如何檢查數據庫中的值? – moritz