1

Rails アプリケーション内で 2008 SQL Server データベースに接続するために、activerecord-sqlserver-adapter gem を使用しています。私はアプリケーション全体で「 Establish_connection 」を使用して複数のデータベースに接続していることに注意してください。rSpec を使用してアプリケーションをテストしていますが、rSpec が作成する DB からエントリを削除したいと考えています。グーグルで調べたところ、database_cleaner gem が問題の解決策になることがわかったので、Gem を含めて railsappname/spec/spec_helper.rb を次のようにセットアップしました。

require 'database_cleaner'

RSpec.configure do |config|

  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
    FactoryGirl.reload
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end

また、次の行を false に更新しました

config.use_transactional_fixtures = false

私の rails_helper.rb RSpec.configure ブロックに、その行が最初にあった場所です。

また、戦略を :truncation に変更しようとしましたが、違いはありませんでした。データはまだ DB に挿入されており、テストの完了後も削除されていません。これは activerecord-sqlserver-adapter の制限ですか? これに対する回避策はありますか? この問題は、アプリ内で複数のデータベースに接続していることが原因ですか? 私はしばらくグーグルで検索しましたが、この同じ問題を経験している人を見たことがないので、アドバイスをいただければ幸いです。

4

1 に答える 1

0

ご指摘ありがとうございます。スタック オーバーフローに関する質問は、SQL Server やアダプタに関するものではありません。それは実際には、ソフトウェアの組み立て方の副産物です。それはすべて、あなたが接続を確立する方法にも関係があるに違いありません。アダプターに関するこのコメントを確認してください。

https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/173#issuecomment-4427121

基本的に、接続を管理できるように、接続を擁護するモデルが 1 つだけあることを確認する必要があります。ほとんどの gem は ActiveRecord::Base についてしか知りません。そのため、多数のデータベースを含むアプリを使用している場合は、必要なすべてのことを必ず実行してください。トリッキーです。あまりにも多く、それについてのブログ記事も書きました。あなたはそれを読むべきです:)

http://technology.customink.com/blog/2015/06/22/rails-multi-database-best-practices-roundup/

最後に...これは純粋に主観的なものです...しかし、私はRailsトランザクションフィクスチャの大ファンであり、空のデータベースでテストを実行していません. 私のアドバイス:

  • Rails のデフォルトを使用します。
  • その上に少量の MiniTest を重ねます。私のminitest-spec-rails gem を使用してください :)
  • ファクトリー ガールを使用します... ただし、開発/テストの相乗効果のためにそれらを活用します。https://github.com/metaskills/named_seedsを参照してください

繰り返しますが、純粋に主観的ですが、最後のビットが役立つことを願っています. 乾杯。

于 2015-11-09T01:47:02.243 に答える