&pgid;
**このページは? [#n3541592]
下記のネタを元にRspecについて勉強してみるページです。
-Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
http://jp.rubyist.net/magazine/?0021-Rspec
-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を使ってみる]]
#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を事前に作成します。
***Blogモデル [#h3d28b63]
-モデル作成
$ ruby script/generate rspec_model Blog name:string
-マイグレーションファイルを編集する
-データベースを更新する
$ rake db:migrate
-fixtureの用意
-スペックを定義する
-specテスト一回目
エラー!!!
/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'
-spec/spec_helper.rbを以下のように変更してみた
-ん?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")
-モデルを実装する
-そしたら動いた。
-モデルを実装する。
$ ./script/spec -fs -c spec/models/blog_spec.rb
Blog#name が設定されていない場合:
- バリデーションに失敗すること
- :name にエラーが設定されていること
Finished in 0.028835 seconds
2 examples, 0 failures
***Entryモデル [#xe8758f3]
-モデル作成
$ ./script/generate rspec_model entry title:string body:text posted_on:date created_at:timestamp updated_at:timestamp blog_id:integer
-マイグレーションファイルを編集する
-データベースを更新する
-フィクスチャを編集する
-スペックを定義する
$ ./script/spec -c spec/models/entry_spec.rb
F
1)
NoMethodError in 'Entry は特定のブログに属すること'
undefined method `blog' for #<Entry:0xb7956ed0>
./spec/models/entry_spec.rb:11:
./script/spec:4:
Finished in 0.085657 seconds
1 example, 1 failure
-モデルを実装する
**まとめ [#n529f97b]