&pgid;
 
 どうも、SEの[[小沼]]です。
 
 **このページは? [#n3541592]
 下記のネタを元にRspecについて勉強してみるページです。
 -Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
 http://jp.rubyist.net/magazine/?0021-Rspec
 --こっちにメモを書いています。
 http://extension.fleck.com/?sh=a5a346241c7a04ba905758354da50436306bdc91
 
 -File: TUTORIAL.ja
 http://kakutani.com/trans/rspec/TUTORIAL_ja.html
 
 今回は第3回ということで前回までの続きです。
 前回でRspecの使い方までをご説明しました。
 今回はRspecをRuby on Rails上で使う方法をご紹介します。
 
 -第一回はこちら
 [[Ruby on Rails/第12回勉強会 - Rspec概要]]
 
 -第二回はこちら
 [[Ruby on Rails/第13回勉強会 - Rspecを使ってみる]]
 
 ** 動画 [#oabecc91]
 http://www.screencast.com/t/b4eymGMn
 
 #blikimore
 
 
 **目次 [#wd9223a3]
 #contents
 
 **日時 [#xf19520d]
 - 2007/10/26(金)
 
 **参加者 [#b239fcd8]
 
 
 ** 動画 [#mba5fc42]
 
 
 *本編 [#v60241bf]
 
 **インストール [#x5533373]
 -Ruby on RailsでRspecを利用する場合、以下の二つのインストールが必要です。
 --Rspec自体
 --Rspec on Rails
 
  $ ./script/plugin install svn://rubyforge.org/var/svn/rspec/tags/REL_1_0_8/rspec
  ...略...
  $ ./script/plugin install svn://rubyforge.org/var/svn/rspec/tags/REL_1_0_8/rspec_on_rails
  ...略...
 
 **必要なファイルの生成 [#n826be9f]
 -rails環境作成
  $rails rspec_test
 -Rspec関連ファイルの作成。
  $ ruby script/generate rspec
 -作成されたファイル、ディレクトリの説明
  spec/
     スペックファイルを配置するルートディレクトリです。Rails 標準のテスティング環境の test/ ディレクトリに相当します。
  spec/spec_helper.rb
     RSpec を Rails で使用するためのヘルパです。アプリケーションに共通する RSpec 関連の処理を記述します。Rails 標準のテスティング環境の test/test_helper.rb に相当します。
  sepc/spec.opts
     Rake 経由で RSpec を実行する際に、spec コマンドへ渡すオプションを設定します。
  script/spec_server
     Rails 環境をロードしたテスト用の dRuby サーバを起動します。テストの実行を速くすることが目的です。次回以降の連載で言及します。
  script/spec
     開発対象の Rails アプリケーション用の spec コマンドです。スペックファイルを指定して実行する場合に使用します。 
 
 -参考:RSpec on Rails でインストールされる rake タスク
 http://jp.rubyist.net/magazine/?0021-Rspec#l54
 
 -RSpec on Rails のテスト用ディレクトリ構成
 http://jp.rubyist.net/magazine/?0021-Rspec#l55
 
 **サンプルを動かしてみる [#h6df9bf3]
 ***今回のサンプルについて [#e2b48e17]
 -modelのスペックを記述します
 -Blog
 
 ***準備 [#oa252101]
 -database.ymlの編集
 -サンプルではsqlliteを使ってるみたいですが、一般的なmysqlを使ってやってみます。
 --ですので、database.ymlを編集します。
 --かつdatabaseを事前に作成します。
  mysqladmin create rspec_test
 
 ***モデルの開発 [#e4417522]
 モデルのビヘイビア駆動開発は以下のようなフローになる。
 -モデル作成
   $ ruby script/generate rspec_model xxxモデル名
 -マイグレーションファイルを編集する
 -データベースを更新する
  rake db:migrate
 -フィクスチャを編集する
 -スペックを定義する
 -モデルを実装する
 
 
 ***重要な点 [#ve77bcf2]
 ''change マッチャ''
 処理の実行前と実行後での変化を定義するマッチャ
  lambda {
    team.add_player(player)
  }.should change(roster, :count)
  //teamにadd_playerするとteamのcoutの値が変化するということを定義
 以下のような使い方が可能
 -メソッドチェインなし
 --とにかく変化することを定義
  lambda {
    team.add_player(player)
  }.should change(roster, :count)
 -byの値だけ変化することを定義
  lambda {
    team.add_player(player)
  }.should change(roster, :count).by(1)
 -fromからtoに変化することを定義
  string = "string"
  lambda {
    string.reverse
  }.should change { string }.from("string").to("gnirts")
  # change マッチャに ブロックを渡す場合には、{} の形式で渡してください。
  # 「do...end」形式はサポートされません。
 -実行後にtoに変化していることを定義
  lambda {
    somevalue = "hogehoge"
  }.should change {somevalue}.to("hogehoge")
 
  
 **問題 [#pa85647f]
 /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb:19: undefined method `alias_method_chain' for ActionController::Rescue:Module (NoMethodError)
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
     from /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:147:in `require'
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb:6
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
     from /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:147:in `require'
     from /home/staff/konuma/test/rails/rspec_test/config/../vendor/plugins/rspec_on_rails/lib/spec/rails.rb:17
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
     from /usr/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:147:in `require'
     from ./spec/models/../spec_helper.rb:5
     from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
     from ./spec/models/blog_spec.rb:1
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:106:in `load_specs'
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:105:in `load_specs'
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:49:in `prepare!'
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec/lib/spec/runner/behaviour_runner.rb:19:in `run'
     from /home/staff/konuma/test/rails/rspec_test/vendor/plugins/rspec/lib/spec/runner/command_line.rb:17:in `run'
 
 --ん?alias_method_chainが見えていないようだ?
 --alias_method_chainはrailsの拡張したmodelクラスに定義されているメソッド。
 ---そこでspec/spec_helper.rbに以下の行を追加
  require File.expand_path("/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/core_ext/module.rb")
 ---そしたら動いた。
 
 
 **まとめ [#n529f97b]
 -
 -
 -
 -changeマッチャのやり方とかに美学というか意地を感じる。
 
 #blikifooter(小沼)
 tag: [[Ruby on Rails>tag/Ruby on Rails]], [[勉強会>tag/勉強会]],[[テスト>tag/テスト]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら