コンパイラかく語りき

import { Fun } from 'programming'

RubyonRailsチュートリアル3章

どうも!chuckです。3章の学習を終えましたので記録。

 

3章 ほぼ静的なページの作成

「ほぼ」っていうのがユルくていいですねw

ここでの静的ページというのは「アクションとビューのみを持つページ」とのこと。

自動生成されたファイルのうち、

コントローラーはapp/controller、

ビューはapp/view

に格納されている。

 

コントローラは以下のように作る。

rails generate controller StaticPages home help --no-test-framework

出た!generateコマンド。要は便利なスクリプトって感じらしい。。

ここではStaticPagesというコントローラを作成しており、その中にhomeとhelpが含まれている。

 

 --no-test-frameworkは自動(RSpec)ではなく手動でテストを作成することを指定。

 

登場した用語

ルーティング(config/route.rb)

Railsはrouteファイルに記述されている内容に従って、複数のURLとWebページを関連付ける(そうなんだ!)

ちなみにconfigファイル自体はRailsの設定に関することファイルが格納される。

f:id:chuck0523:20150617203508p:plain

get "static_pages/home" がhomeアクションとhomeページを関連付けているらしい。

この記述のお陰でstatic_pages/homeにアクセスするとそのページが表示される。

 

コントローラ(app/controllers/static_pages_controller.rb)

f:id:chuck0523:20150617203757p:plain

空っぽに見えるけど、継承によってアクションに記述されているコードを実行する。その後、アクションに対応するビューが表示される。

 

ビュー(app/view/static_pages_controller.rb)

f:id:chuck0523:20150617203952p:plain

こちらがビュー。今はただのプレースホルダー。

 

 

テストをする

TDD=テスト駆動開発。さらに具体的にBDD=振舞駆動開発もある。

テストは単体テスト結合テストがある。この章では結合テストをやる。

Capybara

自然言語(英語)に近い形でテストを記述できるツール

 

テスト駆動開発ではまず失敗するテストを書く。そして正しいコードを実行して成功することを確認する。

 

rails generate integration_test static_pages

とすることでspec/requestsディレクトリにstatic_pages_spec.rbが生成される。このファイルにテストを行うコードを記述する。

f:id:chuck0523:20150617204654p:plain

ここではstatic_pages/homeに”Sample App”という文字列が含まれているかテストしている。

visitがそのページへのアクセスをシミュレーションする。

expect(pages).to have_content("Sample App")

はPagesはCapybaraの変数。

 

ただし、Capybaraの独自使用(DSL)をRailsで使えるようにするためには以下の記述を追記する必要がある。

f:id:chuck0523:20150617205027p:plain

 

テストを実行するには以下のコマンドを実行する。

$ bundle exec rspec spec/requests/static_pages_spec.rb

もちろん、現段階ではテストは失敗する。

 

テストにパスするためにはビューを書き換える。

f:id:chuck0523:20150617205237p:plain

こうすることでビューに”Sample App”という文字列が含まれ、テストをパスする。

 

静的ページの構成要素

1,ルートに登録する(config/routes.rb)

2,アクションを追加する(app/controllers/static_pages_contoller.rb)

3,ビューを作成する(app/view/アプリ名/Htmlファイル名)

 

少しだけ動的なページ

埋め込みRuby

拡張子は.erb

f:id:chuck0523:20150617211536p:plain

<% provide(:title, 'Home')%> 

provide関数を用いて:titleに'Home'を関連付けている。

 

<%= yield(:title)%>

中のコードが実行されて結果が出力される。

 

レイアウトファイル(application.html.erb)

共通の構造をまとめることができる。

f:id:chuck0523:20150617211906p:plain


これによって、HTMLファイルはシンプル化できる。

f:id:chuck0523:20150617212017p:plain