0

私はテスト駆動開発の概念に慣れていません (そして、Rails にはかなり慣れていません)。アプリケーションのテストを作成する方法に行き詰まっています。

バックグラウンダーとして、Web アプリはピア評価ツールであり、個々のグループにアンケートが割り当てられ、そこでピアを評価するよう求められます。したがって、サンプルの質問は次のようになります。

Rate your peers on time management.
 - Peer 1: __
 - Peer 2: __
 - Yourself: __

これを内部的に設定する方法は次のとおりです。

およびモデルの結合モデルとして機能するモデル (グループ間の調査の可視性を制御する) に関連付けられたモデルSurveyがあります。モデルにはs との関連があります。has_manyAssignmentSurveyGroupGrouphas_manyUser

複数のグループに同じ調査を割り当てることができるためGroup、特定のユーザーがどの評価を求められているかを調べる必要があります。(したがって、アンケートは同じですが、上記のサンプルのように表示される人は、ユーザーごとに異なります)。

メソッド を作成することにしました。このメソッドはassignees_for_user(user)、基本的に、調査に割り当てられたユーザーのグループを返します。

このメソッドを単体テストできるようにしたい。今のところ rspec と factory_girl を使っています。いくつかの質問を聞きたいんです:

  1. 私のアプローチは設計的にも正しいですか?
  2. これをテストする必要がありますか?Assignmentその場合、 、Group、およびのインスタンスを作成する必要がありますUserね。
  3. これらのインスタンスをデータベースに永続化せずにスタブ/モックできる最良の方法は何ですか? それとも私はしなければなりませんか?

ありがとう!

4

2 に答える 2

0

ビジネス ロジックを、アクティブ レコード モデル (データベース アダプターと考えてください) とコントローラー (GUI アダプターと考えてください) の両方から、lib/ 内の単純な古い Ruby オブジェクト (PORO) にリファクタリングすることを提案できますか? .

Matt Wynneによる Hexagonal Rails 、Patrick Robertson による Rails Conf 2013 Building Extractable Libraries in RailsMaking ActiveRecord Models Thinおよび Gary Bernhardt は、始めるのに適した場所です。

于 2013-07-29T00:48:24.127 に答える
0

この答えは私が予想していたよりも複雑でした (そして正直なところ、それが誰も答えなかった理由だと思います:P)

mocha のようなフレームワークを使用して、find のようなものをモックすることができます: Rails なしで ActiveRecord をテストする方法は?

代わりに rr を使用することになりました。しかし、アクティブ レコードの関連付けに関しては、アクティブ レコードの関連付けプロキシ オブジェクトを完全には理解していないため、まだ適切な方法を見つけられていません。ですから、これらすべてについての私の教訓は、正直なところ、そもそも関連付けをあざけることで時間を無駄にしないことだと思います。古い格言にあるように、自分のものではないものを単体テストすることはできません!

于 2013-07-16T14:52:18.723 に答える