1

Rails 3プロジェクト「rails-settings-cached」でgemを使用していますが、開発モードでは、gemは問題なくデータベースにアクセスできます。ただし、「rake test」を実行すると、「rails-settings-cached」がテストデータベースではなく開発データベースを使用し続けるため、多くのテストが失敗します。

私のアプリケーションの他の部分は正常に動作します。gemを適切なデータベースに接続するにはどうすればよいですか?

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mmdb_development
  pool: 5
  username: ***
  password: ***
  socket: /var/run/mysqld/mysqld.sock

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mmdb_test
  pool: 5
  username: ***
  password: ***
  socket: /var/run/mysqld/mysqld.sock
4

3 に答える 3

2

問題は、rails-settings-cached...まあ...設定をキャッシュすることです。したがって、テストを実行すると、実際には「開発」データベースからキャッシュされた古い値が使用されます。

rake tmp:cache:clear考えられる回避策は、テストの前後に実行できます。それは機能しますが、それを自動化するために、これらのメソッドをtest_helper.rb内に置くことができます:

def setup
  Rails.cache.clear
end

def teardown
  Rails.cache.clear
end
于 2012-05-08T17:51:53.087 に答える
1

のキャッシュに関する問題はrails-settings-cached、Rails 3.2.8(およびおそらくRails 3以降)のデフォルトのキャッシュがであるということですActiveSupport::Cache::FileStore。これは共有場所にあるファイルにキャッシュされるため、開発、テスト、本番の間で共有されます。これはあらゆる種類の問題を引き起こす可能性があります!

Caching with Railsガイドでは、デフォルトはであると主張していますがActiveSupport::Cache::MemoryStore、ドキュメントが正しくないようです。明らかなドキュメントの不正確さに関して、レールに対する問題を提出しました。

1つの解決策は、テストと開発をを使用するように切り替えることActiveSupport::Cache::MemoryStoreです。デフォルトの32メガバイトで十分な場合は、次の行を両方development.rbと(もちろんブロック内)test.rbに追加するだけです。config/environments.configure do

config.cache_store = :memory_store
于 2012-11-06T19:02:13.817 に答える
0

test_helper.rbファイルの最上部にあるtest/test_helper.rbでテストするようにralsenvを明示的に設定してみてください

ENV["RAILS_ENV"] = "test"
于 2012-04-27T14:47:08.057 に答える