2012-01-04 14 views
0

現在、Rails 2.3アプリケーション用のrspecテストケースを作成中です。私が直面している問題は、アプリケーションが次のような外部データベースからのデータに依存しているということです。外部データベースからのデータに対するRspecテスト

  • メインアプリケーションは外部アプリケーションです。

  • Node_Userは、私がテストしているアプリケーションです。新しいNode_Userが作成されると

は、Node_UserはNode_UserがNode_Userを作成するために使用するいくつかのデータを持つユーザーとリターンを作成Main_Userを呼び出します。

Main_Userデータベースにクエリを作成してそこに作成されたレコードにNode_Userに渡されるデータが含まれていることを確認する方法はありますか?あるいはこれをテストする良い方法がありますか?

ありがとうございました!

+0

ユニットテストや統合テストを書いていますか? –

+0

私はそれがより統合テストになると思います。 Main_Userアプリケーションの呼び出しは、Node_Userモデル内でNet :: HTTP呼び出しとして実行されます。 Main_Userにいくつかのパラメータを送信します。その後、Main_Userレコードを作成し、Node_Userの情報を返します。 データがマッサージされ、最後にNode_Userレコードが作成されます。 Main_Userは、Main_Userに送信されたパラメータから最後に作成されていることを確認します。 – roloenusa

答えて

1

はい、データベースのユーザー/パス/ホスト名にアクセスできる場合、理論的にリモートデータベースを照会できます。 ( "Rails multiple databases"を検索してください)

しかし、私は必ずしもそのアプローチをとることを推奨しません。あなたのテストは、リモートデータベースの状態を変更することです。これは安全でないと私を襲う。テストで大量の削除や壊れた機能が実行された場合は、偽のレコードを作成したり、おそらくデータを削除または破損したりします。つまり、テストでは本番データベースに悪いことが起きる可能性があります。

したがって、私は何らかの方法でリモートデータベースを嘲笑することをお勧めします。 1つのオプションはVCRです。それは本当にクールですが、最初の実行を記録する必要があるため、リモートデータベースで少なくとも1回は操作する必要があります。もう1つの選択肢は、VCRの基礎となるツールの1つ、たとえばFakeWebを使用することです。

もちろん、これは物事のNode_User側だけをテストします。また、リモートレコードが正しいことを確認する必要があると述べました。そのためには、Main_User側でテストを書くことをお勧めします。このようなテストでは、Node_Userからの着信RESTful要求をシミュレートし、正しい結果を検証します。

Main_Userがアプリケーションの場合にのみ機能します。それが第三者サービスであれば、それをテストする安全な方法はないかもしれません。その正確さを信じなければならないかもしれません。

+0

私はちょうど2番目のアプローチをとると思います。どちらのアプリケーションも私に属していて、どちらもローカルホスト環境にあります(実稼動データには触れません)。それらを独立してテストする方がより有用で安全になります。データのシード処理とMain_Userでの一貫性のテストを行うための良いアプローチを知っていますか? – roloenusa

+0

はい、私はその目的でMachinist(https://github.com/notahat/machinist)を使用します。私はFaker(http://faker.rubyforge.org/)にも統合しています。これは、現在のテストでは重要ではない必須のモデル属性を生成するために使用します。 – rlkw1024

関連する問題