35
Sinatra とか Padrino とかで テストをどうしているか? - Padrino 黒ミサ in 神泉 - 2011/10/29 @ 神泉 Uchio Kondo (@udzura)

Testing in Sinatra

Embed Size (px)

DESCRIPTION

this is a slide presented on TokyuRubyKaigi04

Citation preview

Page 1: Testing in Sinatra

Sinatra とか Padrino とかでテストをどうしているか?

- Padrino 黒ミサ in 神泉 -

2011/10/29 @ 神泉Uchio Kondo (@udzura)

Page 2: Testing in Sinatra

近藤うちお(@udzura)

● Rubyist(2年半ほど)

● Groovyに挫折● 現在Haskellを順調に挫折● 富士マガ所属(ご近所)、  雑誌を定期購読で買ってね!

● カルマ: Rack, Sinatra, PadrinoあたりRails3, TDD, Linux, アジャイルとかも興味はあるんですよ……

柴犬のあくび

Page 3: Testing in Sinatra

近藤うちおさんのworks

● ブロッグ http://blog.udzura.jp/

● Padrino 日本語サイト翻訳リーダー● Padrino framework contributor

● 自称、 Padrino framework エバンジェリストJPです● RubyGems: rack-session-dbm● RubyGems: rspec-padrino

● 若干のふざけたウェッブサービス● WP on passenger、RSpec on PHPの記事書いた人● その他、 http://udzura.jp

Page 4: Testing in Sinatra

今日は

● Enterprise Sinatra の話です

Page 5: Testing in Sinatra

今日は

● アプリケーションのテストの話です

Page 6: Testing in Sinatra

ところで、

● 「単体テスト/結合テストなんて存在しない」● Toggeter● http://togetter.com/li/206083

Page 7: Testing in Sinatra

今日の内容

● 今日する話● Sinatraでどういうテスト関連ライブラリを使ってきたのか?

● 今日しない話● 単体テスト/結合テストって何?● Sinatraに合ったテストプロセスとかって?

Page 8: Testing in Sinatra

キ~ワ~ド

● Rack::Test● Padrino framework● RSpec● Mocha● Machinist/Faker● Capybara● Sinatra::TestHelpers● RSpec::Padrino

Page 9: Testing in Sinatra

Rack::Test

● Sinatra のテストの基本● コントローラ/ルーティング

● こういうテストができる

Page 10: Testing in Sinatra

要するに

● get “/hogehoge” を叩く● RackのENVのモックが、 app.call を起動● callで返ってきたRackレスポンスをオブジェクトに変換

● #last_request, #last_response などで取得できる

● あとは普通に値を検査する

Page 11: Testing in Sinatra

ところで

● Sinatra アップリケ~ションでテスト準備● test/ なり spec/ なりディレクトリを掘る● spec_helper.rb なりを準備● RSpec.configure do |conf|● Rakefile なりを準備● Gemfile なりを準備● モデルなどを追加する度にテストファイルも作る● ………

Page 12: Testing in Sinatra

あなたと、

Page 13: Testing in Sinatra

Padrinoのジェネレータを使う

● プロジェクトジェネレータの段階でテストライブラリ、モックライブラリを指定できる

● コントローラ、モデルをジェネレートすれば一緒にテストも作ってくれる

● padrino rake test/spec コマンドを用意してくれる

Page 14: Testing in Sinatra

Sinatraでテスト

● Padrinoが便利、Padrinoに移行してみよう

        ~完~

Page 15: Testing in Sinatra

とは言わず、

● 具体的に何したか書きます

Page 16: Testing in Sinatra

Padrinoの対応状況(0.10.5)

● Testing libraries(-t)● bacon, shoulda, cucumber, testspec, riot, rspec,

minitest● default: Test::Unit

● Mocking libraries(-m)● rr, mocha

Page 17: Testing in Sinatra

@udzura さんの例

● RSpec と Mocha です。● なので、以降の例はRSpecでの話です。

Page 18: Testing in Sinatra

Machinist/Faker

● In `spec/spec_helper.rb`

● 頭の方に

● RSpec.configureの直後に

Page 19: Testing in Sinatra

blueprints.rb

● spec_helper.rb と同じディレクトリ

● 詳細ググろう● そして、 User.make とかそんな感じ

Page 20: Testing in Sinatra

普通に使えました

Page 21: Testing in Sinatra

Capyara

● In `spec/spec_helper.rb`

● 頭の方に

● 受け入れテスト_spec.rbに

● #visit, #current_path, #page など Capybara DSL

Page 22: Testing in Sinatra

普通に使えました(2)

Page 23: Testing in Sinatra

Sinatra::TestHelpers

● sinatra-contrib gem に含まれる

● インクル~ドする

● 便利なショートカットヘルパー集です● #session, #last_env など

Page 24: Testing in Sinatra

具体的には #mock_app が便利

● 動的アプリ定義、でも、 Padrino では使わないかなあ● むしろ Sinatra で使うためのgemで使えそう

Page 25: Testing in Sinatra

RSpec::Padrino

● rspec-rails の大変便利なマッチャー/ヘルパーをPadrinoに合わせて移植しよう計画

● 拙作● バージョン 0.0.1

● というか、 route_to とか assigns ぐらいしかできていない

Page 26: Testing in Sinatra

こんなん

Page 27: Testing in Sinatra

感想

● rspec-rails って多機能で便利なんですね

Page 28: Testing in Sinatra

頑張ります

● https://github.com/udzura/rspec-padrino

Page 29: Testing in Sinatra

まとめ

● Sinatra、便利アイテムが使えないかと思いきやRailsで使えるものが意外と使える● Rails の肩に乗りまくる

● ないものはない● ないものは、ない

● 作って「俺スゲー」するチャンス!!!1● 正直 Padrino 便利、テストが必要になってきたら導入をご一考ください

Page 30: Testing in Sinatra

おまけ

Page 31: Testing in Sinatra

最新Padrino情報

● スタートPadrinoの資料が見られます● http://www.slideshare.net/udzura/startpadrino

● Sinatra、そしてPadrinoのイマが分かる!

Page 32: Testing in Sinatra

Padrino重要情報

● Padrino 黒ミサ in 京都● 2011/12/10

http://atnd.org/events/21442

Page 33: Testing in Sinatra

東京、そして京都で連続イベント

● Padrino 、流行ってますね!

WAF

Page 34: Testing in Sinatra

Padrinoをよろしくね

● 若いソフトウェアなので、皆さんのフィードバックがまだまだ必要です!

● 二郎に飽きたあなたもぜひ!● ハッカソンしたいですね(チラッ

Page 35: Testing in Sinatra

__END__

● ご清聴ありがとうございました