【17日目】【1日20分のRailsチュートリアル】演習の2.と高度なセットアップ(第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
表示できました。
これにて演習完了!
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分】でした。