【14日目】【1日20分のRailsチュートリアル】テスト駆動開発でAboutページ作成
今日は「3.3.2 Red」から。
3.3.2 Red
- 「失敗するテストを最初に書く」
- 「次にアプリケーションのコードを書いてパスさせる」
- 「必要ならリファクタリングする」
のように進めるらしい。
「失敗するテスト」としてAboutページのテストコードを追加する。
test/controllers/static_pages_controller_test.rb
test "should get about" do get :about assert_response :success end
テスト実行。
Aboutページはまだ作ってないのでもちろん失敗します。
$ bundle exec rake test : 1) Error: StaticPagesControllerTest#test_should_get_about: ActionController::UrlGenerationError: No route matches {:action=>"about", :controller=>"static_pages"} test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>' 3 runs, 2 assertions, 0 failures, 1 errors, 0 skips
3.3.3 Green
エラーメッセージに従って、
まずルーティングファイルにAboutページ用のルートを追加。
config/routes.rb
get 'static_pages/about'
再びテスト実行。
ルート追加前とエラーメッセージが変わりました。
$ bundle exec rake test : 1) Error: StaticPagesControllerTest#test_should_get_about: AbstractController::ActionNotFound: The action 'about' could not be found for StaticPagesController test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>' 3 runs, 2 assertions, 0 failures, 1 errors, 0 skips
「アクションが見つからない」って言われたので
StaticPagesコントローラにabout
アクションを追加する。
app/controllers/static_pages_controller.rb
def about end
三たびテスト実行。
今度は何かな。
$ bundle exec rake test : 1) Error: StaticPagesControllerTest#test_should_get_about: ActionView::MissingTemplate: Missing template static_pages/about, application/about with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates" * "/home/ubuntu/workspace/sample_app/app/views" * "/usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/app/views" test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>' 3 runs, 2 assertions, 0 failures, 1 errors, 0 skips
Aboutページのテンプレート、つまり「View」がないって怒られました。
じゃあAboutページの「View」を追加してあげましょう。
app/views/static_pages
にabout.html.erb
を追加する。
GUI使ってもいいけどせっかくなのでターミナル上からファイル作成する。
$ touch app/views/static_pages/about.html.erb
空ファイルが作成されるので下記のように更新。
app/views/static_pages/about.html.erb
<h1>About</h1> <p> The <a href="http://www.railstutorial.org/"><em>Ruby on Rails Tutorial</em></a> is a <a href="http://railstutorial.jp">book</a> and <a href="http://screencasts.railstutorial.org/">screencast series</a> to teach web development with <a href="http://rubyonrails.org/">Ruby on Rails</a>. This is the sample application for the tutorial. </p>
四度目のテスト実行。
もう大丈夫でしょ。
$ bundle exec rake test : Finished in 0.269752s, 11.1213 runs/s, 11.1213 assertions/s. 3 runs, 3 assertions, 0 failures, 0 errors, 0 skips
通りました!
Aboutページの動作も見ておく。
<ローカルアドレス>/static_pages/about
3.3.4 リファクタリング
ソースコードの乱れについての説明。
当初は予定していなかった機能の追加でソースコードがぐっちゃぐちゃになるのはあるあるですね…。
行き当たりばったりで作ったせいで分かりにくかったので、クラス設計から作り直したこともあります。(ちょうどそのとき仕事が暇だった)
暇になることなんてもうそうそうないのでこまめなリファクタリング大事ですね。
詳しくは3.4.3で解説とのこと。
今日はちょっとしたテスト駆動開発の実践でした。 作業時間は【25分】。
次は「3.4 少しだけ動的なページ」から。