2012-04-02 9 views
5

私は少し前から、私が少し作業をしていた既存のレールアプリにテストを追加するのに、遅い進歩を遂げてきました。私はRailsアプリケーションをどのようにテストすべきですか?

私は、既存の機能を破壊するデプロイメントのデバッグと修正の時間を節約するために、どの程度のテスト(ユニット、機能、統合)で十分なのか把握しようとしています。

私はこのアプリケーションで作業している唯一の人です。これは、基本的には小規模企業(約20名)の在庫管理データベースです。私は最初からテストを追加していませんでした。なぜなら、私は実際にその点を見ていないからです。しかし、いくつかのデプロイメントは、少し前に既存の機能を台無しにしてしまったので、追加するのが良いかもしれないと思いました。

モデルとコントローラを個別にテストして統合テストを行う必要がありますか?そこからエラーが発生した場合、何が間違っているかを把握するために、統合テストとバックトラックを行うべきだと考える開発者がいるようです。

これまでRSpec + Factory Girl + Shouldaを使っています。そのため、モデルのテストを簡単にセットアップできました。

私は現在コントローラーを使い始めていますが、もう少し紛失しています。私は個々のコントローラをテストする方法を知っていますが、コントローラを同時にテストするという統合テストを使用してアプリケーションフローをテストするだけでよいのかどうかわかりません。

+0

光の側にようこそ。 –

答えて

1

アプリが既に書かれている後にテストを書くことは面倒です。最低限、統合ケース(ほとんどのコントローラーの機能とビューをテストします)をテストし、モデルを個別にモデル化して、モデルが必要と考えるように機能するようにする必要があります。

統合テストの場合、私はCapybaraを使いやすくしています。

3

正常なパスと一般的な障害パスをテストするために統合テストを使用しますが、エッジケースや詳細なシナリオでは、モデル/ビュー/コントローラテストを記述します。

私は通常、アプリケーションに機能を書き込む前にテストを書きますが、その後にテストを追加する場合は、SimpleCovのようなものを使用してアプリケーションのどの領域がより多くのテストを必要としているかを確認し、応用。

+0

+1はカバレッジに言及しています。 –

0

経験則として、ほとんどのテストは、単位で機能する必要があり、一部の機能は統合する必要があります。

Railsはこの誠意を持っており、同じことをする必要があります。 、

  • あなたのモデルのそれぞれについて、ユニットテストをそれらのそれぞれのあなたの検証のそれぞれのテストケースを追加し、最終的に作るために、最後の1:あなたが持っている必要があり最低で

    モデルが保存されていることを確認します。関連するモデル(has_manybelongs_to)にdependant: :destroytouch: trueなどのものがある場合は、それらのテストケースも追加してください。

  • 各コントローラの機能テスト。各アクションのテストケース。いくつかのアクションは複数の応答を持つことができます(422エラーの場合など)。そのため、エラー応答をテストする別のケースを追加します。承認フィルタがある場合は、それらもテストしてください。

次に、典型的な新しいユーザーフローの統合テストを行うことができます。 Like 登録 - >投稿を作成 - >閲覧する - >ログアウトもう1つは、権限のないユーザーが自分のリソースにアクセスできないことを確認することです。

これまでのテストを行わずにANYコードをコミットしないでください。

ツリーを植えるのに最適な時期は10年前ですが、2番目に良い時期は今やです。テストを開始してください!

関連する問題