10072008

_RSpec + restful_authenticationのコントローラテスト

restful_authenticationを使ったアプリで、RSpecにおいてコントローラのテストを行う時に、どう書いたらよいかのメモ。


require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
include AuthenticatedTestHelper

describe TextController , "のindexアクションにおいて" do
  fixtures :statuses , :users
    
  before do
    login_as :hogeman
  end

  it "は @comments があること" do
    Status.should_receive(:find_all_by_user_id).with(users(:hogeman).id).and_return(@comments) 
    get :index
    assigns[:comments].should == @comments
  end

end

正直、RSpecのレシピが書かれたまとめのサイトか本が欲しい!

_初めてのRuby

DSC_2241.JPG

「初めてのRuby」が 届きました。早速読み始めています。

この本は「全くのプログラム初心者」を対象としていない代わりに、他言語経験者に対してRubyへ容易に移行できるよう詳しく書かれています。あいまいな部分を、この本でしっかりと埋めていきたいですね。

Rubyを覚えたいなという方にも最初の1冊目としてオススメです。定番本になると思います。



"初めてのRuby" (Yugui)

11032008

_RSpec on Rails

rspec_on_rails

Railsでアプリケーションを作っていると、unitテストやfunctionalテストなどを書くのが正直非常に骨が折れます。テストを書いていてもこれでいいのかと不安になることもあり、個人的に苦手。
先月、セミナーで角谷信太郎さん講演を拝見し、RSpecの生産性の高さと、autotestでテスト結果がGrowlで表示されるのが非常にかっこ良く「これはいい!」と環境整備してみました。

環境整備の際、下記の素晴らしいページを参考にさせていただきました。

http://blog.tkmr.org/tatsuya/show/361-rails-macosx-rspec-zentest-growl http://d.hatena.ne.jp/zariganitosh/20080305/1204672076 http://d.hatena.ne.jp/willnet/20080301/1204387678 http://jp.rubyist.net/magazine/?0021-Rspec

以下作業ログ。

gemでRSpec,ZenTestなどをインストール

sudo gem install rspec
sudo gem install zentest
sudo gem install diff-lcs
sudo gem install redgreen

インストールしたZenTestをディレクトリからexample_dot_autotest.rbを.autotestとしてホームディレクトリにコピー。MacPorts環境なので、ここでは/opt。


cp \
/opt/local/lib/ruby/gems/1.8/gems/ZenTest-3.9.1/example_dot_autotest.rb \
~/.autotest

TKMRさんのブログ記事を参考に.autotestを編集。

#コメントアウト
require 'autotest/redgreen'
require 'autotest/growl'

#追加

module Autotest::Growl

def self.growl title, msg, img="~/.rails_ok.png", pri=0, sticky=""

system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"

end

Autotest.add_hook :ran_command do |at|

results = [at.results].flatten.join("\n")

output = results.slice(/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+not implemented)?/)

if output

if $~[2].to_i > 0

growl "Test FAIL", "#{output}", "~/.rails_fail.png", 2

else

growl "ALL GREEN", "#{output}", "~/.rails_ok.png"

end

end

end

end



テスト結果に表示するための画像をダウンロードしてホームディレクトリに.rails_fail.png、.rails_ok.pngとして設置します。




Growlをインストール。また、Growlのパッケージに入っているgrowlnotifyもインストールします。


Leopardの場合、バージョン1.1.2のGrowlではautotestでGrowlが動かないそうです。zariganitoshさんのブログの記事を参考に修正します。





http://d.hatena.ne.jp/zariganitosh/20080305/1204672076


http://hasseg.org/blog/?p=111



Railsプロジェクトに移動。





cd ~/app/railsapp


rspec on railsプラグインをインストール。





ruby script/plugin install http://rspec.rubyforge.org/svn/tags/CURRENT/rspec_on_rails


RSpec用のファイルを生成します。





ruby script/generate rspec


RSpecジェネレータでモデルを作ります(script/generate modelは使わない)





ruby script/generate rspec_model Item


モデルのmigrationを書いてmigrate





rake db:migrate


モデルのspecを書きます





fixture

vi spec/fixtures/items.yml






spec

vi spec/models/item_spec.rb


autotestの前にテストサーバを立ち上げておくと実行速度が速くなるそうです。



script/spec_server



最後にautotestを起動



autotest

これでファイルが変更されるたびに、autotestが作動してRedかGreenかGrowlですぐにわかるようになります。ものすごくモチベーションがあがりますね。これ。