ぞえの技術めも

Ruby on Rails勉強中

【17日目】【1日20分のRailsチュートリアル】演習の2.と高度なセットアップ(第3章終わり)

Ruby on Railsチュートリアル(第3版)

今日は「3.6 演習 2.」から。

3.6 演習

2.サンプルアプリケーションにContact (問い合わせ先) ページを作成してください。
リスト3.13を参考にして、/static_pages/contactというURLのページに「Contact | Ruby on Rails Tutorial Sample App」というタイトルが存在するかどうかを確認するテストを最初に作成しましょう。
3.3.3でAboutページにやったのと同じように、Contactページにもリスト3.39のコンテンツを表示しましょう (リスト3.39にはリスト3.38のような修正は行われていないので、そのままコピペしても動きません)。

まずContactページ用にテストを追加。

test/controllers/static_pages_controller_test.rb

(2016/10/05 回答のコードは削除しました

テスト実行して失敗することを確認。

$ bundle exec rake test
  :
  1) Error:
StaticPagesControllerTest#test_should_get_contact:
ActionController::UrlGenerationError: No route matches {:action=>"contact", :controller=>"static_pages"}
    test/controllers/static_pages_controller_test.rb:29:in `block in <class:StaticPagesControllerTest>'

4 runs, 6 assertions, 0 failures, 1 errors, 0 skips

ルーティングないよ、ってことなのでContactページ用のルートを追加。

config/routes.rb

(2016/10/05 回答のコードは削除しました)

保存してテスト実行。

$ bundle exec rake test
  :
  1) Error:
StaticPagesControllerTest#test_should_get_contact:
AbstractController::ActionNotFound: The action 'contact' could not be found for StaticPagesController
    test/controllers/static_pages_controller_test.rb:29:in `block in <class:StaticPagesControllerTest>'

4 runs, 6 assertions, 0 failures, 1 errors, 0 skips

次はStaticPagesコントローラにcontactアクションないよ、ってことなのでアクション追加。

(2016/10/05 回答のコードは削除しました)

保存してテスト実行。

$ bundle exec rake test
  :
  1) Error:
StaticPagesControllerTest#test_should_get_contact:
ActionView::MissingTemplate: Missing template static_pages/contact, application/contact 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:29:in `block in <class:StaticPagesControllerTest>'

4 runs, 6 assertions, 0 failures, 1 errors, 0 skips

次はテンプレートないよ、ってことなのでContactページ用のテンプレート作成する。   touchコマンドでファイルを作成して、

$ touch app/views/static_pages/contact.html.erb

中身更新。

app/views/static_pages/contact.html.erb

(2016/10/05 回答のコードは削除しました)

保存してテスト実行。

$ bundle exec rake test
  :
4 runs, 8 assertions, 0 failures, 0 errors, 0 skips

テスト通りました。

動作も見ておこう。
サーバー起動して

$ rails server -b $IP -p $PORT

<ローカルアドレス>/static_pages/contact

f:id:kt_zoe:20160802124956p:plain

表示できました。
これにて演習完了!

3.7 高度なセットアップ

必須ではないけど便利そうなので導入しておく。

3.7.1 minitestレポーター

テスト結果の見た目変えれるだけ?
導入しといた。

3.7.2 Backtrace silencer

スタックトレースが見やすくなる、ってことで導入しといた。

3.7.3 Guardによるテストの自動化

ファイルを保存する度に自動でテストを実行してくれるようにできるらしい。
便利そう、ってことで導入。

$ bundle exec guard init
RubyDep: WARNING: Your Ruby is outdated/buggy. (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1)
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: install 2.3.1.
02:49:20 - INFO - Writing new Guardfile to /home/ubuntu/workspace/sample_app/Guardfile
02:49:20 - INFO - minitest guard added to Guardfile, feel free to edit it

(WARNING気になる)

よく分からないけどGuardfileを全部コピペ。
言われるがまま.gitignoreにSpringを追加。

Springサーバーは若干不安定な点があるそうで、動作が重くなってきたら適宜Springのプロセスをkillするといいそう。

Guardの設定が完了したのでGuardを実行。
実行しておくとファイル保存を検知してテストを自動実行してくれるっぽい。
これもよく使うターミナルとは別ターミナルで実行しておくのが良さそう。

$ bundle exec guard

今日の作業時間は【33分】

第3章が終わりました!
第3章を読むのにかかった時間は【202分】でした。

次は「第4章 Rails風味のRuby」から。