問題タブ [database-cleaner]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1895 参照

ruby-on-rails - RSPEC でのテスト中に、突然、不可解なアクティブ レコード接続タイムアウトが発生する

ほぼ無知な分野ですので、よろしくお願いします。800 以上の rspec テストのスイートがあります。セット全体または特定のテスト ファイルのみを実行しているときに、いくつかのテスト ファイルを実行した後 (20 程度と言いますが、まったく同じ数になることはありませんが)、突然不可解なことに、すべてのテストが同じエラーで失敗し始めます。

通常の実行では、20 回ほどのリクエスト テストの後にこれらのエラーが発生し始め、残りの 780 回以上のテストはすべて上記とまったく同じエラーで失敗します。以前に完全にテストされた以前の git コミットとブランチに戻ろうとしました。うまくいきません — まだ 780 以上の失敗があります。また、再作成されたテスト DB を完全に削除しました。運もありません。

接続プールなどに関する多くのスレッドを読みましたが、何が起こっているのかさえ診断する方法がわかりません。私が現在知っている事実は次のとおりです。

  • Postgresql の使用
  • 開発環境は私が知る限り正常に動作します
  • すべてが正常に機能していた時期から現在まで、私が認識している環境に変更やアップグレードを行っていません。データベースの移行さえありません。モデル、ビュー、およびコントローラーのコードを変更するだけです。前述したように、以前のコミットに戻っても何も修正されません。
  • config.use_transactional_fixtures = falseSeleniumを介してajax機能をテストしているため、spec_helper.rbで。
  • ただし、特定のテスト セットに Selenium が使用されているかどうかに関係なく、テストは失敗します。Selenium を使用していないテストだけを実行しても、20 回程度のテストの後で失敗が始まります。

トランザクション フィクスチャの代わりに、次の構成で Database Cleaner を使用しています。

ここで何が起こっているのですか?より具体的には、問題が何であるかを確認するために見るべきアイデアはありますか? この種の ActiveRecord の問題を扱った経験はほとんどなく、どこから始めればよいかさえわかりません。

更新なぜこれが起こっているのか正確にはわかりませんが、具体的にどのコードが原因であるかはわかっています。最近のコミットで、新しいスレッドに通知メールの送信を追加しました。コードは次のとおりです。

アプリケーションの他の多くの場所で、この正確なパターン (さまざまな電子メールで) を使用しましたが、そのすべてがテストされています。何らかの理由で、この特定の 1 つがデータベースのタイムアウト エラーを引き起こしています。なぜこれが起こっているのかについてのアイデアは大歓迎です。

更新 このインスタンスでスレッドがどのように機能するかを理解する段階にないので、これ以外に問題の正確な原因はわかりません:私が読んだことから、実行をプログラムで制御することは非常に困難ですこうして作られたスレッド。しかし、私は解決策を見つけました。上記のブロックの代わりに、ブロックを次のように変更しました。

したがって、私は基本的に、開発用とは異なるテスト用のコードを実行しています。テスト用の新しいスレッドはありません。それは悪い考えだと思いますが、本当の問題がどこにあるかを理解できるまで (何らかの理由で本質的に失敗しないテスト、または失敗したテストを強制しないスレッドをまだ使用しているコード)、これは私が行く必要があるものです。

最終更新

メールを非同期で送信するThread.new方法をやめ、代わりに Sidekiq を実装しました。もう少し作業が必要ですが、うまく機能し、問題なくテストされます...

0 投票する
1 に答える
1775 参照

ruby-on-rails-4 - Rspec はレコードを DB に保存しません

rails_4 アプリケーションのテストを書いています。rspec、selenium、capybara、database_cleaner、site_prism、factory girl を使用しています。

アプリで 2 つのデータベースを使用しています。私のテストでは、1 番目の DB のレコードが 2 番目の DB のレコードと等しいことを確認する必要があります...

しかし、テストを実行すると:

  • database_cleaner が「それ」のたびにデータベースをクリーンアップしない
  • カテゴリを保存するためにセレンを使用してフォームを投稿すると、カテゴリ/インデックスとカテゴリ/:id/show にこのカテゴリが表示されます。しかしCategory.count returns me 0!!!

rspec環境を正しくセットアップするのを手伝ってください:

私のspec_helper.rb:

私のサポート/ capybara.rb:

私のサポート/mobile_market_pages.rb:

私のサポート/hooks.rb:

スペック例:

典型的なエラー:

私の工場:

お願い助けて!

0 投票する
1 に答える
841 参照

ruby-on-rails - RSpec でコントローラーをテストするときにデータベースがクリーニングされない

モデルを RSpec でテストするとき、次のコードを使用してデータベースをクリーンアップします。

すべてのモデル テストに合格しますが、コントローラーをテストすると、モデルが動作するのと同じデータセットを使用しているように見え、テストがエラーになります。

代わりに、次のコードを使用して Controller テストをパスさせることができます。

ただし、これにより、モデル テストが失敗します。どちらかのテスト セットを壊さずにこれらのブロックを組み合わせる方法について何かアドバイスはありますか?

0 投票する
2 に答える
236 参照

ruby-on-rails - オブジェクトが作成されます。(RoR、データベースクリーナー、ファクトリーガール)

私は Rails の初心者です。助けてください。何が問題なのかわかりません。前に何か他のものが書かれているようです(:each)...そして、Cardオブジェクトが作成されていないtest_spac.rbにテストを書くにはどうすればよいですか。メソッド before(:each) は、このテストでは機能しませんでした。

これは仕事です:

test_spec.rb:

rails_helper.rb:

これは機能しません:

test_spec.rb:

rails_helper.rb:

0 投票する
1 に答える
72 参照

ruby-on-rails - コントローラーとビューが依存する Rails モデル レコードをどのように処理すればよいですか?

スポーツ チームを扱う Rails アプリケーションがあります。Clubすべてのチームを含み、es などに関連するモデル がありMatchます。アプリケーションは、これらのクラブの 1 つを中心としており、そのレコードの存在に依存しています。基本的に、メイン クラブを定義するアプリケーション ヘルパー メソッドがあります。

そして、それはコントローラ ロジック (他のものにはできない特定のことを行うことmain_clubができます) とビュー (今後の試合に関する特定の重要な情報を表示するなど) で参照されます。

これは私には面倒に感じます。「ソフト」データベースレコードに依存するハードコード? しかし、私はクラブが記録であり、そのすべての関係を可能にする必要があります.

私はそれをそのまま残しましたが、RSpec を台無しにします。で実行Rails.application.load_seedしていても、 on などをconfig.before(:suite)呼び出すことができないため、スペックが常に失敗します。.matchesnil

この種のことに対して確立された慣行はありますか?これについてどうすればよいですか?

編集:シード ファイルには、現在のすべてのクラブ (メインのクラブを含む) が含まれており、管理インターフェイス/コントローラーにさらに追加する可能性があります。RSpec の問題は、DatabaseCleaner の何かが間違っていることに起因している可能性がありますが、a) それが何であるかはわかりません。b) 「ソフト」データベース レコードに依存するハード コードに関する私の懸念は、RSpec に関係なく残っています。

0 投票する
0 に答える
1096 参照

ruby-on-rails - Factory Girl Associationsを使用したRspec Feature Spec

アカウント モデル設定を編集する必要があるユーザーの機能仕様をテストしようとしています。私はテストに慣れていないので、私の問題がファクトリーガールアソシエーションの設定方法によるものなのか、それともデータベースクリーナーの設定の問題なのかわかりません.

私のspec_helper.rb:

私の仕様/機能/account_spec.rb

スペックを 1 つだけ実行すると、テストに合格します。

しかし、テスト スイート全体を実行すると、エラーが発生します。

0 投票する
1 に答える
590 参照

ruby-on-rails - テストのグループに同じ db トランザクションを使用する Minitest 仕様

minitest で rspec before(:all) と同等のことを行うにはどうすればよいでしょうか。実行に永遠にかかるテストのグループがありますが、各テストの前にデータベースをセットアップする必要がなければ、非常に高速になります。

私がやりたいことは次のとおりです。

0 投票する
1 に答える
752 参照

ruby-on-rails-4 - テスト間でRSpecデータベースクリーナーが発生しない

かなり複雑な一連のテストがあり、以下のはるかに単純な形式で再現されています。

use_transactional_fixturesこれらはJavaScriptベースのテストであり、トランザクションフィクスチャが機能していなかったため、構成でオフにする必要がありました。そこで、次のようにデータベース クリーナーを実装しようとしました (最終的には gem もテストする必要があるため、 Sucker Punch gem の指示https://github.com/brandonhilkert/sucker_punchを使用):

問題は、これが役に立たないことです:

  • (各ループで) 成功するはずのクレジット カードの場合、最初のパスは成功しますが、その後はすべて失敗しRecord.countます。
  • 失敗するはずのクレジットカードの場合、テストが実行されるまでRecordsにテストデータベースに既に存在するため、失敗します

基本的に、それが通過する唯一の方法は、強制的にクリーンアップすることですbefore(:all)(トリックbeforeもそうしませんでした)after

データベースクリーナーを適切にセットアップするにはどうすればよいですか? それとも、私はただやるべきbefore(:all)ですか?