9
9

More than 5 years have passed since last update.

How'd you test padrino's helpers

Posted at

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

参考資料

Padrinoコミッタskade氏のありがたいコメント

request, response, env とかは呼び出せないのでは?

stubすればいいんじゃないかと思う。どっちにしろどういうリクエストで呼ばれるヘルパーなの? とかはspecに書くことになるのではないだろうか〜

その他思ったこと

--module-helper」みたいなジェネレータのオプションを渡すとmoduleでヘルパーを生成してほしいと思った。

同じようなことを思った方は、まずはリポジトリに行って「Fork」というボタンを押してみましょう。

謝辞

ぼくの割と適当なモックコードを形にした同僚のIさん。

蛇足::TODO::自分へ

  • もっとイケてる感じにして rspec-padrino に組み込む。
  • 「Padrino 開発のしおり」みたいなのが比較的必要な感じになってきたので公開する。
9
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9