Padrino framework で helper のテストを書く。
デフォルトの状態ではヘルパーのテストをジェネレートしてくれないっぽい。
$ padrino g controller welcome get:index get:hello
create app/controllers/welcome.rb
create app/helpers/welcome_helper.rb
create app/views/welcome
apply tests/rspec
create spec/app/controllers/welcome_controller_spec.rb
なので適当に spec/app/helpers
というディレクトリを掘る。
ヘルパーをモジュールにする。
app_helper.rb
-App.helpers do
+module AppHelper
#...
end
+App.helpers AppHelper
RSpecのほうの spec_helper.rb
に色々設定する。
spec_helper.rb
# helpers の配下を読み込ませる
+Dir[File.expand_path(File.dirname(__FILE__) + "/../app/helpers/**/*.rb")].each(&method(:require))
# Padrino の組み込みヘルパーメソッドを全部呼び出せる
# オブジェクトを生成し、
# Rails ばりに「helper」で呼び出せるようにする。
RSpec.configure do |conf|
conf.before :suite do
+ helpers = Object.new
+ helpers.extend Padrino::Helpers::TagHelpers
+ helpers.extend Padrino::Helpers::AssetTagHelpers
+ helpers.extend Padrino::Helpers::NumberHelpers
+ #......
+ Object.send(:define_method, :helpers) do
+ helpers
+ end
end
end
app_helper_spec.rb
describe AppHelper do
before { helper.extend AppHelper }
subject { helper.some_helper_method }
it { should == ... }
# ...
end
参考資料
request, response, env
とかは呼び出せないのでは?
stubすればいいんじゃないかと思う。どっちにしろどういうリクエストで呼ばれるヘルパーなの? とかはspecに書くことになるのではないだろうか〜
その他思ったこと
「--module-helper
」みたいなジェネレータのオプションを渡すとmoduleでヘルパーを生成してほしいと思った。
同じようなことを思った方は、まずはリポジトリに行って「Fork」というボタンを押してみましょう。
謝辞
ぼくの割と適当なモックコードを形にした同僚のIさん。
蛇足::TODO::自分へ
- もっとイケてる感じにして rspec-padrino に組み込む。
- 「Padrino 開発のしおり」みたいなのが比較的必要な感じになってきたので公開する。