私はレールアプリケーションプログラミングで非常に便利だとわかったトリックは、その場でメソッドを作成するためにclass_eval
を使うことができるということです。私は今テストに着手し始めており、同様のアイデアがテストを生成するために使用できるのだろうかと思います。レールでテストを動的に生成することは可能ですか?
たとえば、私はbefore_filter
を持っていて、ユーザーがコントローラ内のすべてのアクションにログインするように要求しています。 before_filter
がすべてのアクションに適用されていることを確認するテストを作成したいと思います。個々のテストを個別に書き出す代わりに、これらのテストを自動的に生成したいと考えています。
このタイプのテストはお勧めですか、個別にテストを書くことに固執すべきですか?そうであれば、どうやってそうするのだろう?
EDIT:それは一度だけ実行されますように、私はこのようなコードのブロックを置く今、人々はこれが有用であることを確認したことを
actions = {:index => :get,:show => :get,:edit => :get,:update => :put}
actions.each_pair do |action,type|
class_eval(%Q{def test_user_required_for_#{action}
set_active_user users(:one)
#{type} :#{action}
assert flash[:error]
assert_redirected_to :action => :index
end
})
end
、これは次のようになりますこれらのテストを作成するには?
'class_eval'の文字列形式を使用しないようにしてください。あなたが 'class_eval'を使う必要があるなら(それはしばしば必要ではありません)、ブロックフォームを使います。それはより安全です。 –