2013-10-21 19 views
6

當我運行在schema.rb文件來設置數據庫PG :: DependentObjectsStillExist:錯誤使用rspec的

$rspec "/any_file" 

rspec的負載時。

我的理解是,當談到此行

create_table "queue_classic_jobs", force: true do |t|; end 

Rspec的運行

DROP TABLE "queue_classic_jobs" 

命令。

它trows這個錯誤

PG::DependentObjectsStillExist: ERROR: cannot drop table queue_classic_jobs because 
other objects depend on it (ActiveRecord::StatementInvalid) 
DETAIL: function lock_head(character varying) depends on type queue_classic_jobs 
function lock_head(character varying,integer) depends on type queue_classic_jobs 
HINT: Use DROP ... CASCADE to drop the dependent objects too. 
: DROP TABLE "queue_classic_jobs" 

它看起來對我來說,我必須做出rspec的

DROP TABLE "queue_classic_jobs" CASCADE 

怎麼會呢?

+1

可能的解決辦法:在軌運行控制檯:您可以通過加入這一行,在配置/環境/ test.rb年底禁用它'的ActiveRecord :: Base.connection.execute(「DROP TABLE‘queue_classic_jobs’ CASCADE')'。這消除了依賴於表格的對象。 –

回答

10

你在運行Rails> = 4.1嗎? ActiveRecord有一個新功能,可以在不重新加載整個數據庫的情況下使您的測試模式與schema.rb保持同步。你可以在這裏閱讀:http://guides.rubyonrails.org/4_1_release_notes.html#railties-notable-changes

不幸的是,它不適用於外鍵:https://github.com/rails/rails/issues/14708

config.active_record.maintain_test_schema = false 
+1

不,但我在幾天內升級到4.1。將查看它然後+1回答一個老問題! –

+0

完美,謝謝! – recurser