hackugyo (Double strike)

2011-10-25

Web DB Press vol.61 pp. 60-3を実践した

はじまるよ

 永和システムマネジメントの浦蔦さん(@ursm),高橋さん(@kenchan),柴田さん(@hsbt)らの記事を実践しようと思い,Web DB Press vol.61(2011.03) pp. 60-3を実践しました.
 簡単なブログアプリを作りながら,RSpecの導入をしてくれる記事です.ちょこちょこ書きもれっぽいところがありますが(次に修正すべきファイルの名前が示されてないとか),雑誌記事ってそういう細かいところよりスピード感がだいじなもので,すし,常識を働かせればRoR初心者でも穴埋めできます.

RSpecインストール

 まずは
rails new blog -T
し,しかるのちにGemfileに以下を追記.


# Use rspec-rails
group :development, :test do
gem "rspec", "2.4.0"
gem "rspec-rails", "2.4.1"
end


で,bundle installするのですが,こちら(gem管理の新標準ツール"Bundler"のTips - 昼メシ物語)を参考にして
$ bundle install --path vendor/bundle
としました.
(--pathを入れないと,以下の警告が出る.)

Your bundle is complete! It was installed into ./vendor/bundle
The path argument to `bundle install` is deprecated. It will be removed in versi
on 1.1. Please use `bundle install --path vendor/bundle` instead.


この状態で
$ rails generate model article title:string body:text
$ bundle exec rake db:migrate
する.
# あとで述べますが,ここでもう1つ,bundle exec rake db:test:prepare を行う必要があります.
警告が出る:

$ bundle exec rake db migrate
WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
at wdbpress61_blog/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/rdoctask.rb

ひとまず無視でも問題ありません.気になるようなら上記のrdoctask.rbをモンキーパッチして書き換えるか,下記ページを参考にrakeのヴァージョンを変えましょう.
404 Not Found

テストを書く

テストを書く.
spec/models/article_spec.rb
を編集.(Railsのくせにarticles_spec.rbではないのので注意)

require 'spec_helper'

describe Article do
context "title and body set" do
# contextはテスト対象の状態や状況を指定する
before do # テストの前処理
@article = Article.new(
:title => "初めてのブログ",
:body => "最初の記事です。"
)
end
it "title should be set" do
@article.title.should == "初めてのブログ"
end
it "body should be set" do
@article.body.should == "最初の記事です。"
end
# it {@article.body.should == "最初の記事です。"}
# のようにも書ける
end
# ここまででサンプルグループ"titleとbodyを指定した場合"が定義されおわった

end

UTF-8で保存すること.

テスト実行

さてこの状態で
$ bundle exec rspec spec/models/article_spec.rb
すると,なぜか

ActiveRecord::StatementInvalid:
Could not find table 'articles'

と出る.
ここ(ruby on rails - ActiveRecord::StatementInvalid: Could not find table 'tablename' - Stack Overflow)を見て,ActiveRecordsのバグか!? モンキーパッチを当てるのか!? と焦ったが,
テスト用のDBがmigrateされていなかったのが原因.
(ここ参照.newbieが忘れがちなアプリケーションごとのrspecセットアップ - ひきこもりにっき。@はてだら
というわけでひと手間加えて解決.

$ bundle exec rake db:test:prepare
$ bundle exec rspec spec/models/article_spec.rb
You must use ANSICON 1.31 or later (http://adoxa.110mb.com/ansicon/) to use colour on Windows..

Finished in 2.47 seconds
2 examples, 0 failures

さらに,
$ bundle exec rspec -f documentation spec/models/article_spec.rb
とすると,サンプルグループごとにテスト結果が出力されてうれしい.

You must use ANSICON 1.31 or later (http://adoxa.110mb.com/ansicon/) to use colour on Windows

Article
title and body set
title should be set
body should be set

Finished in 2.36 seconds
2 examples, 0 failures

なお,このANSICONについては,こちらを参照することにして,明日またつづき(はこちら.http://d.hatena.ne.jp/hackugyo/20111031/1320069305).
Windows で RSpec の色 - hs9587’s diary

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元
Connection: close