我一直在試圖解決問題幾個星期了。我爲我的Rails應用程序運行rspec測試,並且除了一個我似乎無法理解的錯誤外,它們工作正常。Rails測試數據庫不會持續記錄更改
- 我正在使用MySQL和InnoDB引擎。
- 我在spec_helper.rb中設置了
config.use_transactional_fixtures = true
- 我使用命令
rake spec:db:fixtures:load
手動加載我的測試夾具。 - rspec測試正在爲BackgrounDRb worker編寫,它正在測試記錄可以更新其狀態(通過state_machine gem)。
這裏是我的問題:
我有一個名爲Listings
模型。 rspec測試在名爲listing_worker.rb
的文件中調用update_sold_items
方法。 此方法爲特定記錄調用listing.sell
,該記錄將列表記錄的「狀態」列設置爲「已售出」。 到目前爲止,這是所有工作的罰款,但是當update_sold_items
方法完成,我的RSpec的測試失敗在這裏:
listing = Listing.find_by_listing_id(listing_id)
listing.state.should == "sold"
expected: "sold",
got: "current" (using ==)
我一直在試圖追查爲什麼狀態變化不是持久的,但我非常丟失。下面是我在測試過程中放置在update_sold_items
方法的一些調試代碼的結果:
pp listing.state # => "current"
listing.sell!
listing.save!
pp listing.state # => "sold"
listing.reload
pp listing.state # => "current"
我不明白爲什麼它保存完美的罰款,但隨後恢復到每當我打電話reload
原始記錄,或Listing.find
等等。
感謝您閱讀本文,如果我沒有提供足夠的信息,請提出任何問題。
感謝您的幫助, 彌敦道乙
附:我沒有爲其他類創建新記錄並測試這些記錄的問題。當我更新數據庫中已有的記錄時,它似乎只是一個問題。
當你重新加載時,不要事務性的燈具會導致ROLLBACK?一切都在交易中,所以他們可以在每次測試之前重置。重新加載/ ROLLBACK將是原始狀態,而不是保存狀態,是嗎?你爲什麼重新加載它? – wesgarrison 2010-03-30 01:18:42
好點。我並不是100%確定交易是如何運作的。謝謝你的幫助! – ndbroadbent 2010-03-31 00:23:49