今日は朝練の日

だがしかし二度寝orz
子供が病院に連れていかれた契機で続きに着手。
前回作成した controller なコマンドの痕跡が以下らしい。

$ rails generate controller Pages home contact
      create  app/controllers/pages_controller.rb
       route  get "pages/contact"
       route  get "pages/home"
      invoke  erb
      create    app/views/pages
      create    app/views/pages/home.html.erb
      create    app/views/pages/contact.html.erb
      invoke  rspec
      create    spec/controllers/pages_controller_spec.rb
      create    spec/views/pages
      create    spec/views/pages/home.html.erb_spec.rb
      create    spec/views/pages/contact.html.erb_spec.rb
      invoke  helper
      create    app/helpers/pages_helper.rb
      invoke    rspec
      create      spec/helpers/pages_helper_spec.rb
$

branch してる模様。そもそもディレクトリは何処だ、というあたりから確認しないといけないあたりが超微妙。
ディレクトリを探しだして確認。

$ git branch
  master
* static-pages
$

branch してますな。で、テキストによれば spec/views と spec/helpers は削除しなさい、とあります。

$ git rm -r spec/views
$ git rm -r spec/helpers

実行して以下を kickoff します。あ、まだ git add してないから削除のみで良かった模様。

$ rm -rf spec/views
$ rm -rf spec/helpers

で、以下。

$ bundle exec rspec spec/
..

Finished in 0.59979 seconds
2 examples, 0 failures
$

green というヤツですな。わははは的。
この時点で試験に失敗する場合の対処に関する記述もありますがスルー。autotest 云々もスルー。次に出てくるのが Spork というものなのですが、autotest と組合せて云々って言ってるのでこれもスルーだな。最近は完全に開発環境が OSX 前提ってあたりがなんとなく困ります。

_Now let’s get to the Red part of the Red-Green cycle by writing a failing test for the about page._とのこと。

require 'spec_helper'

describe PagesController do
  render_views

  describe "GET 'home'" do
    it "should be successful" do
      get 'home'
      response.should be_success
    end
  end

  describe "GET 'contact'" do
    it "should be successful" do
      get 'contact'
      response.should be_success
    end
  end

  describe "GET 'about'" do
    it "should be successful" do
      get 'about'
      response.should be_success
    end
  end
end

"GET 'about" が追加になってますね。で試験を動かしてみます。

$ rspec spec/
..F

Failures:

  1) PagesController GET 'about' should be successful
     Failure/Error: get 'about'
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>"about"}
     # ./spec/controllers/pages_controller_spec.rb:21:in `block (3 levels) in <top (required)>'

Finished in 1.47 seconds
3 examples, 1 failure

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:20 # PagesController GET 'about' should be successful
$

えらく懇切丁寧な出力ですな。確かに試験を追加しただけなので route も controller もある訳は無いわけで。
テキストでは controller を以下に

class PagesController < ApplicationController

  def home
  end

  def contact
  end

  def about
  end
end

config/routes.rb を以下に、とあります。

SampleApp::Application.routes.draw do
  get "pages/home"
  get "pages/contact"
  get "pages/about"
  .
  .
  .
end

盛り込んで試験実行。

$ rspec spec/
..F

Failures:

  1) PagesController GET 'about' should be successful
     Failure/Error: get 'about'
     ActionView::MissingTemplate:
       Missing template pages/about with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x00000003aaead0>"
     # ./spec/controllers/pages_controller_spec.rb:21:in `block (3 levels) in <top (required)>'

Finished in 0.32763 seconds
3 examples, 1 failure

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:20 # PagesController GET 'about' should be successful
$

げ。app/views/pages/about.html.erb も追加が必要らしい。以下。

<h1>Pages#about</h1>
<p>Find me in app/views/pages/about.html.erb</p>

で、再度試験実行。

$ rspec spec/
...

Finished in 0.25525 seconds
3 examples, 0 failures
$

green ッスね。わははは。
次は refactor ということなのですが、スルー。別途で次の_Slightly dynamic pages_の項も読んでログ出力するかもしれませんが、子供が病院から戻ってきたので出掛けるかも。