2012-03-27 18 views
4

私は、アプリケーションのテストデータベースとしてSQLite3インメモリデータベースを使用して、Railsアプリケーションのテストをスピードアップしようとしています。私はこのblog postの指示に従った。私のRailsテストで私のメモリ内SQLite3データベースの内容が見えないのはなぜですか?

database.ymlで私のデータベースの設定は次のようになりますすることができますように器具が、ロードすることができないので、私のテストのすべてが失敗

def in_memory_database? 
    Rails.env == "test" and 
    ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLiteAdapter || 
     ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLite3Adapter and 
    Rails.configuration.database_configuration['test']['database'] == ':memory:' 
end 

if in_memory_database? 
    ActiveRecord::Schema.verbose = false 
    puts "creating sqlite in memory database" 
    load "#{Rails.root}/db/schema.rb" 
end 

test: 
    adapter: sqlite3 
    database: ":memory:" 
    encoding: utf8 
    verbosity: quiet 

推奨されているように私も初期化子を作成参照:

creating sqlite in memory database 
Loaded suite test/unit/vendor_appliance_test 
Started 
E 
Finished in 0.070079 seconds. 

    1) Error: 
test_the_truth(VendorApplianceTest): 
ActiveRecord::StatementInvalid: Could not find table 'advertisers' 


1 tests, 0 assertions, 0 failures, 1 errors 

イニシャライザはデータベースを読み込みます(y出力の最初の行から見ることができます)、何らかの理由でスキーマが間違った場所にあるか、テストが始まるまでに拭き取られたために、スキーマがテストに表示されません。

誰でもこれまでに見たことがありますか?

答えて

2

は共有接続については、このを見てみましょう:

http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/

sqlliteは、接続ごとのインメモリDBを維持しています。アクティブレコードは接続プールを使用し、テストを実行するときには別の接続を使用しています。さまざまなポイントで接続のオブジェクトIDをチェックして、実際のオブジェクトの変更を確認することができます。

1つの接続を共有する場合は、期待する動作が得られるはずです。

とは

1

ちょうどtest_helper.rbに以下のコードを入れ:-)起動するように速くなり

def in_memory_database? 
    ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLiteAdapter || 
    ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLite3Adapter and 
    Rails.configuration.database_configuration['test']['database'] == ':memory:' 
end 

class ActiveSupport::TestCase 
    if in_memory_database? 
     ActiveRecord::Schema.verbose = false 
     puts "creating sqlite in memory database" 
     load "#{Rails.root}/db/schema.rb" 
    end 
end 
関連する問題