2011-08-04 2 views
4

私は同じモジュールを含む3つのコントローラを持っています。Rails 3 - コントローラモジュールをテストするにはどうすればよいですか?

テスト:モジュールを1か所にユニット化するにはどうすればテストできますか?

コントローラごとに3つの同一の機能テストを作成する必要があります(DRYではない)。

TestController/TestController1/TestController2:

class TestController < ApplicationController 
include TestModule 

test_module :test, :only => [:index] 
... 
end 

TestModule:事前に

module TestModule 
extend ActiveSupport::Concern 

module ClassMethods 
    private 

    def test_module(resource, options = {}) 
    self.before_filter(options.slice(:only, :except)) do 
    puts 'test_module' 
    end 
    end 
end 
end 

ありがとう!

答えて

2

コントローラのテストでは、コントローラーが正確にテストする必要があります。したがって、コントローラー用に作成したテストでは、コントローラーのアクションが、自分が何をするためにどのモジュールに含まれているかにかかわらず、期待どおりの動作をしていることを確認する必要があります。それらをブラックボックスと見なしてください。コントローラーにいくつかの入力を与え、出力が正しいかどうか確認してください。

モジュールを独自のエンティティとしてテストし、モックアップとテストを行い、各モジュールメソッドを十分に検証する必要があります。コントローラは将来変更される可能性があります。このように、モジュールのテストカバレッジは常に維持されます。

+0

ありがとうございます。私は自分のコントローラーのテストを書きます。しかし、私のモジュールのために単体テスト(Test:Unit)を書くにはどうすればいいですか?私はコントローラを嘲笑しなければならない?もしそうなら、私はこれらのテストをどこに置くべきですか? – invaino

+0

このように考える:モジュールのテストを書くことは、モデルのテストを書くことのようなものです。彼らはどちらもその中にメソッドを持っています。そのため、メソッドにパラメータをコールしたり、メソッドにパラメータを渡したりすると、そのメソッドから特定の結果が出ることが予想され、それがモジュールでテストする必要があります。だから私が 'TestModule.create_something_amazing'を呼び出して、それが私にとって何か驚くべきものを作り出すと期待したら、テストはそれが私が期待することを検証するべきです。これらのテストは、あなたのモジュールがRailsアプリケーションの 'lib'ディレクトリに配置されているはずですので、' Unit/lib'フォルダに入れてください。 – iwasrobbed

+1

あなたの言ったようなモデルモジュールをテストしました。しかし、私はこの特定のモジュールをテストする方法を理解していません。これは、コントローラのクラスメソッドです。どういうわけか、コントローラーのインスタンスの整合性を確認する必要がありますが、どうすればそれを行うことができるのか分かりません。私は単位テストでtest_moduleメソッドを呼び出すことはできませんが、それは動作しません:( – invaino

0

RSpecなどの標準ツールをコントローラのテストに使用する方法を学ぶことができます。

以下はRyan Bates' Railscastへのリンクです。

+0

まあ、私はコントローラをテストする方法を知っています、この場合、私はちょうどこのコントローラモジュールのための分離テストを書く方法を知りたい。 – invaino

関連する問題