&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/テスト]]