2011-06-02 15 views
10

我一直試圖在我最近負責的Rails應用程序中運行「真相」單元測試,mac_test.rb。它看起來像這樣:Rails:舊的,不存在的數據庫表導致測試出錯

require 'test_helper' 

    class MacTest < ActiveSupport::TestCase 
     # Replace this with your real tests. 
     test "the truth" do 
     assert true 
     end 
    end 

我已經運行rake db:test:prepare,我試圖運行使用ruby -I test test/unit/mac_test.rb測試。

不過,我得到以下簡稱錯誤輸出:

Loaded suite test/unit/mac_test 
    Started 
    EEEEEEEEEEEEEEE 
    Finished in 0.377261 seconds. 

     1) Error: 
    test_datas(ActionController::IntegrationTest): 
    ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: vendors: DELETE FROM "vendors" WHERE 1=1 


     2) Error: 
    testjigs(ActionController::IntegrationTest): 
    ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: vendors: DELETE FROM "vendors" WHERE 1=1 


     3) Error: 
    test_datas(ActionController::TestCase): 
    ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: vendors: DELETE FROM "vendors" WHERE 1=1 

    <more errors here> 

    15 tests, 0 assertions, 0 failures, 15 errors 

所有15個錯誤類似於前三 - 他們抱怨缺少廠商表。供應商顯然習慣於存在 - 有像vendor_helper這樣的剩餘文件,並且routes.rb文件中還有一個map.resources :vendor。我刪除了舊的供應商文件並刪除了map.resources:供應商行。

因此,沒有任何模型,視圖,控制器,測試,數據庫表或任何命名供應商/供應商。使用TextMate搜索「供應商」的項目(不區分大小寫),只發生一次不在註釋,日誌文件,README或boot.rb文件中的「供應商」,那是在Capfile中。 (我不認爲會影響測試?)

我試過使用rake db:reset來查看它是否是一些奇怪的數據庫的東西,但它仍然爆炸。

如果我嘗試使用rake test:units --trace,(剛拿到的痕跡,我不知道怎麼去用個別測試的跟蹤)我得到的縮略的輸出:

** Invoke test:units (first_time) 
    ** Invoke db:test:prepare (first_time) 
    ** Invoke db:abort_if_pending_migrations (first_time) 
    ** Invoke environment (first_time) 
    ** Execute environment 
    ** Execute db:abort_if_pending_migrations 
    ** Execute db:test:prepare 
    ** Invoke db:test:load (first_time) 
    ** Invoke db:test:purge (first_time) 
    ** Invoke environment 
    ** Execute db:test:purge 
    ** Execute db:test:load 
    ** Invoke db:schema:load (first_time) 
    ** Invoke environment 
    ** Execute db:schema:load 
    ** Execute test:units 
    /usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/auth_code_test.rb" "test/unit/cal_data_test.rb" "test/unit/calibration_test.rb" "test/unit/helpers/auth_codes_helper_test.rb" "test/unit/helpers/jn_macs_helper_test.rb" "test/unit/jn_mac_test.rb" "test/unit/log_entry_test.rb" "test/unit/mac_test.rb" "test/unit/option_test.rb" "test/unit/q_test_test.rb" "test/unit/serial_test.rb" "test/unit/source_test.rb" "test/unit/test_data_test.rb" "test/unit/testjig_test.rb" 
    Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader 
    Started 
    EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 
    Finished in 1.06271 seconds. 

     1) Error: 
    test_datas(ActionController::IntegrationTest): 
    ActiveRecord::StatementInvalid: SQLite3::SQLException: no such table: vendors: DELETE FROM "vendors" WHERE 1=1 

    <more similar errors> 

    52 tests, 0 assertions, 0 failures, 52 errors 
    rake aborted! 
    Command failed with status (1): [/usr/local/bin/ruby -I"lib:test" "/usr/loc...] 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:995:in `sh' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1010:in `call' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1010:in `sh' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1094:in `sh' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1029:in `ruby' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1094:in `ruby' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/testtask.rb:117:in `define' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1112:in `verbose' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/testtask.rb:102:in `define' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain' 
    /usr/local/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
    /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31 
    /usr/local/bin/rake:19:in `load' 
    /usr/local/bin/rake:19 

我在如何讓這個不會爆炸的損失。任何人都可以幫助我找到讓Rails意識到應該不再有任何「供應商」的方法嗎?

編輯:我用Rails 2.3.2和1.8.7的紅寶石(2009-06-12 PATCHLEVEL 174)的i686-darwin9.7.0]

回答

20

檢查名爲vendors.yml的fixture文件的測試文件夾。如果它在那裏,並且你沒有供應商tabler,你會得到這些錯誤,因爲默認情況下,Rails試圖用來自該文件的數據填充供應商表。

+0

我刪除了vendors.yml文件,並修復它,謝謝!我原以爲TextMate在進行項目範圍的搜索時會包含文件名,但我想不是。 – roris 2011-06-03 17:36:22

+1

@布里恩很好的幫助! ......這讓我瘋狂。 – 2015-02-22 18:49:30

1

這可能是因爲您的{RAILS_ROOT}/DB /架構.rb文件中仍然有一些關於之前供應商表的信息。該文件中的信息用於構建測試環境。如果它包含供應商表信息,則可以運行rake db:schema:dump來刷新該文件,然後再次嘗試您的測試。

相關問題