sinatraでrspecをautospecで使うメモ
最近sinatraを使い始めました。
rspecをsinatraで使い始めるまで右往左往したのでその時のメモ
cucumberも使おうかと思ったけど、あれはお客さんに見せる事ができるテスト仕様だから美味しいんであって、個人の趣味プログラミングで、しかもsinatra使ってサックリとサイト作るには手軽さが損なわれる気がしたのでとりあえず保留。
sinatraをインストール
$ sudo gem install sinatra $ sudo gem install rack
appを作成
$ mkdir myapp $ cd myapp $ touch app.rb
/myapp/app.rb
require "rubygems" require "sinatra" get '/' do "hello" end get '/hoge' do "get params #{params[:huga]}" end
rspecとかいろいろインストール
$ sudo gem install rspec
$ sudo gem install ZenTest
$ sudo gem install autotest
$ sudo gem install autotest-fsevent
$ sudo gem install rack-test
$ sudo gem install shotgun
config.ruを作る
$ touch config.ru
/myapp/config.ru
require 'app' #set :environment, :production set :environment, :development run Sinatra::Application
.autotestの作成
自分のHomeフォルダに.autotestを作成
$HOME/.autotest
# -*- ruby -*- require 'autotest/fsevent'
specの置き場所を作る
$ cd myapp $ mkdir spec
specの設定ファイルとか作る
$ cd sepc $ touch spec.opts $ touch spec_helper.rb
/myapp/spec/spec.opts
--colour --format progress --loadby mtime --reverse
/myapp/spec/spec_helper.rb
require File.join(File.dirname(__FILE__), '..', 'app.rb') require 'rubygems' require 'sinatra' require 'rack/test' require 'spec' require 'spec/autorun' require 'spec/interop/test' set :environment, :test set :run, false set :raise_errors, true set :logging, false
appのテスト用specを作る
$touch app_spec.rb $ls app_spec.rb spec.opts spec_helper.rb
/myapp/spec/app_spec.rb
require File.dirname(__FILE__) + '/spec_helper' describe "App" do include Rack::Test::Methods def app @app ||= Sinatra::Application end it "should respond to /" do get '/' last_response.should be_ok end it "should return the correct content-type when viewing root" do get '/' last_response.headers["Content-Type"].should == "text/html" end it "should return 404 when page cannot be found" do get '/404' last_response.status.should == 404 end describe "hoge" do it "post "huga" do get "hoge", { :huga => 'piyo'} last_response.status.should == 200 (last_response.body =~ /piyo/).should_not be_nil end end end
autospecの実行
app.rbのある場所で以下のコマンド
$ autospec
とりあえずこんな感じで動くようになる。
あとRailsで使っていときのメソッドとは少し違ってきちゃうのでrak-testのメソッドを確認したほうが良いと思います。
http://gitrdoc.com/brynary/rack-test/tree/master
基本的に使うのは
- get(uri, params = {}, env = {})
- request(uri, env = {})
- last_request
- last_response
- follow_redirect!
- header(name, value)
- authorize(username, password)
ぐらいかな。