はじめてのRailsチュートリアル(3章)

前回の続きです!本章は主にテストについて学びます🤗

学習の覚書なので、ところどころ日本語が変かもしれません。。

プロジェクトを作成しHerokuへデプロイ

rails newして先ずはデプロイしていきます。

herokuへpushしようとしたら下記エラーが。最初から躓いてがっくり。

remote:  !     Failed to install gems via Bundler.
remote:  !     Detected sqlite3 gem which is not supported on Heroku:

SQLiteを全環境でインストールしてしまうのが原因っぽいので、group :development, :test do に移動してあげ、再度bundle install、heroku push したら上手くいきました!

RailsチュートリアルのGemfileをそのままコピペしたら起こらなかったエラーなのですが、自分はrails newしたあとのGemfileを編集してbundle installしたのが悪かったですね。

解決したので早速generateコマンドを使って静的なページを作成していきます!

スクリーンショット 2019-11-24 13.20.21

これは以前の章でもやっていることなのでサクサクできました。

また、演習にあるコントローラーの作成・削除も簡単にできました🎉

  $ rails generate controller StaticPages home help
 $ rails destroy  controller StaticPages home help

テストからはじめる

何らかの変更を行う際には、常に「自動化テスト」を作成して、機能が正しく実装されたことを確認する習慣をぜひ身に付けましょう。

Railsの初心者はテストの重要性をここで教えてもらうのだなぁと関心しました。

テストが重要であるという点ではRails開発者の意見はほぼ一致していますが、(中略)TDD の是非については、当分議論が終わりそうにありません。

TDDについては、周りのエンジニアが推奨している考えだったので賛成派が圧倒的多数だと思っていたけど、議論Rails開発者の中では議論が終わらなそうな案件なんですね・・。

たいていの開発者は、テストを書くのに慣れてくるとテストを先に書くようになります。

コラムにあるこの文を見てマジか・・。となりました。

最初のテスト

RED(テスト失敗)GREEN(テスト成功)しながらaboutページを作っていきます。

スクリーンショット 2019-11-24 14.41.31

期待通りの結果にはできたのですが、わたしのターミナルでは色がつきません。gemfileに「gem 'minitest-reporters'」を追加しているのに・・なんでだろう・・。(shellはfishを使っています)

provideとyieldメソッド

各ERBファイルにprovideを使ってheadのtitleを変数にし、最終的にはapp/views/layouts/application.html.erbファイルでhead部分を共通化させていきました。

<% ... %>と<% =... %>の違いは、単に実行するだけなのが前者、実行してテンプレートに挿入するのが後者です。

このあたりもprogateで演習した内容だったのでサクサクすすめられました!

まずテストを書いて新規ページを作成する

演習の「サンプルアプリケーションにContact (問い合わせ先) ページを作成してください」では、まずテストを書いて、エラーを読みながらページ作成できたのがよかったです!順序立てて作成ができるし、エラーになったときに何が悪いのかわかりやすかったです。

まずテストを書いて、ルーティングの設定をする

rootの場合は「root_url」(Railsヘルパー?)でurlを表せば良いんですね〜!

  test "should get root" do
   get root_url
   assert_response :success
 end

 test "should get home" do
   get static_pages_home_url
   assert_response :success
   assert_select "title", "Home | #{@base_title}"
 end

さいごに

この章では、簡単ではありますがはじめて「テスト駆動開発」を体験できました。丁寧に1つずつ説明されてるので、特に躓くことなくサクサクと進められてたのしかったです〜!

次は4章かな。


スキ頂けると嬉しいです〜