1

私はいくつかのRailsコントローラーのRSpecテストを書いてきましたが、Authlogic認証が正しく機能していることを確認する強い衝動を発見しました。また、各アクションが同じアプリケーション全体のレイアウトを使用していることを確認する必要があると感じています。ただし、すべてのアクションでこの動作のテストを作成するのはばかげているようです。

私が見たいのは、関連付けと検証のためのShouldaのマッチャーに似た、フィルターとレイアウトのための1行のマッチャーです。残念ながら、そのようなマッチャーは利用できないようです(このブログ投稿のフィルター用の一部のTest :: Unitマクロを除く)。自分で書きたくなりますが、すでに書いている人が見つからないので、そのようなマッチャーが実際に必要かどうか疑問に思います。

だから私の質問は、コントローラーの一般的な動作をどのようにテストしますか(テストする場合)、フィルターとレイアウトをテストするワンライナーマッチャーは役に立ちますか?私自身、コントローラー仕様のワンライナーとフィルターを明示的に指定するか、フィルターを指定してコントローラーのフィルターとレイアウトを無視するかを決定しようとしています(とにかく1行のコードしかないため)。

4

1 に答える 1

0

フィルタの仕様を書くというアイデアは好きではありません。実装に近すぎるようです。TDD / BDDメソッドを使用してコントローラーを最初から構築した場合は、おそらく最初にアクションを記述し、ロジックを追加して(たとえば、認証を処理するため)、代わりにフィルターに入れる必要があることに気づきました。スペックが「現在のユーザーがアカウントユーザーでない場合はインデックスリクエストを拒否する」の方針に沿っている場合、スペックは(aircode)のようなことを実行できるはずです。

current_user = Factory.create(:unauthorized)
controller.should_not receive(:index)
get :index
request.should redirect_to(some_safe_path)

また、アクションがフィルターを使用しているかどうかは関係ありません。

Rspecマクロを使用してコントローラーの仕様を乾かすことができます。だから(もっと手を振る)

describe MyController do
  should_reject_anonymous(self)
  ...
end

module ControllerMacros
  def should_reject_anonymous(test_controller)
    describe test_controller, "Authentication" do
      it "rejects index" do
        test_controller.should_not_receive(:index)
        get :index
        response.should redirect_to(some_safe_path)
      end
    end
  end
end
于 2010-08-19T09:37:05.143 に答える