朝練
試験に失敗するなぁ、と思ってたら chapter 4 を merge していなかったことが判明。で、filling-in-layout な branch はステることにします。
一応、5.1 までの部分を盛り込んで試験 green を確認しとります。
5.2
とりあえず以下。
$ rails generate integration_test layout_links invoke rspec create spec/requests/layout_links_spec.rb $
ええと、以下を盛り込んで試験実行してみましたが、当たり前に red です。
require 'spec_helper' describe "LayoutLinks" do it "should have a Home page at '/'" do get '/' response.should have_selector('title', :content => "Home") end it "should have a Contact page at '/contact'" do get '/contact' response.should have_selector('title', :content => "Contact") end it "should have an About page at '/about'" do get '/about' response.should have_selector('title', :content => "About") end it "should have a Help page at '/help'" do get '/help' response.should have_selector('title', :content => "Help") end end
とりあえず app/controllers/pages_controller.rb に Help は追加済みですね。あるいは app/views/pages/help.html.erb も大丈夫ですね。
あとは config/routes.rb を云々する必要があるのかどうか。以下を追加して試験 green を確認してます。
match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' root :to => 'pages#home'
ちょい本文読も。今、5.2.2 までな部分ですね。
5.2.3
続けます。というか上記な記述で
- contact_path
- about_path
- help_path
- root_path
なるナニでパスを参照できるのか。これは凄い。昔は無かったソレですね。ええと、_header.html.erb を以下に修正して
<header> <% logo = image_tag("logo.png", :alt => "Sample App", :class => "round") %> <%= link_to logo, root_path %> <nav class="round"> <ul> <li><%= link_to "Home", root_path %></li> <li><%= link_to "Help", help_path %></li> <li><%= link_to "Sign in", '#' %></li> </ul> </nav> </header>
あるいは _footer.html.erb を以下にしてます。
<footer> <nav class="round"> <ul> <li><%= link_to "About", about_path %></li> <li><%= link_to "Contact", contact_path %></li> <li><a href="http://news.railstutorial.org/">News</a></li> <li><a href="http://www.railstutorial.org/">Rails Tutorial</a></li> </ul> </nav> </footer>
これはこれは。
5.3 User signup: A first step
ここがなんとかなったら別な作業に着手な方向なのだけどどうなることやら。とりあえず User signup ということで user なナニを作成する模様。
$ rails generate controller Users new create app/controllers/users_controller.rb route get "users/new" invoke erb create app/views/users create app/views/users/new.html.erb invoke rspec create spec/controllers/users_controller_spec.rb create spec/views/users create spec/views/users/new.html.erb_spec.rb invoke helper create app/helpers/users_helper.rb invoke rspec create spec/helpers/users_helper_spec.rb $
で、使ってないので削除とのこと。
$ rm -rf spec/views $ rm -rf spec/helpers
例によって試験を書く模様。spec/controllers/users_controller_spec.rb とのことで以下。
require 'spec_helper' describe UsersController do describe "GET 'new'" do it "should be successful" do get 'new' response.should be_success end end end
あら? デフォで上記だな。users_controller.rb も new なメソドがあります。今ってデフォな試験はパスする形なのかな。
$ bundle exec rspec spec/ ............. Finished in 0.87498 seconds 13 examples, 0 failures $
そうらしい。これから記述を追加していくのか。まず試験を追加。spec/controllers/users_controller_spec.rb で以下。
require 'spec_helper' describe UsersController do render_views describe "GET 'new'" do it "should be successful" do get 'new' response.should be_success end it "should have the right title" do get 'new' response.should have_selector("title", :content => "Sign up") end end end
タイトルな試験が追加されてますな。こんどこそ試験 red か。
なんか盛大にメセジが出力されたので一部のみ。 >|| Finished in 0.4702 seconds 10 examples, 1 failure
users_controller.rb を以下に。
class UsersController < ApplicationController def new @title = "Sign up" end end
試験 green です。
$ bundle exec rspec spec/controllers/ .......... Finished in 0.37897 seconds 10 examples, 0 failures $
次は spec/requests/layout_links_spec.rb な試験を云々とのこと。signup を追加するのか。
require 'spec_helper' describe "LayoutLinks" do . . . it "should have a signup page at '/signup'" do get '/signup' response.should have_selector('title', :content => "Sign up") end end
とりあえず試験 red を確認
Finished in 0.23217 seconds 5 examples, 1 failure
で、routing を云々するのか。
SampleApp::Application.routes.draw do get "users/new" match '/signup', :to => 'users#new' match '/contact', :to => 'pages#contact' match '/about', :to => 'pages#about' match '/help', :to => 'pages#help' root :to => 'pages#home' . . . end
うーん。なんか routes.rb 他所のエディタで開いてるみたいなんだけど。
で、signup_path なナニを盛り込むのか。以下は app/views/pages/home.html.erb です。
<h1>Sample App</h1> <p> This is the home page for the <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a> sample application. </p> <%= link_to "Sign up now!", signup_path, :class => "signup_button round" %>
ここでとりあえず一旦終了らしい。
$ bundle exec rspec spec/ ............... Finished in 0.54433 seconds 15 examples, 0 failures $
試験 green も確認。sighup なリンクから何かが出るのも確認。とりあえず master に merge しておきます。Exercises なナニはまた別途で。
$ git add . $ git status # On branch filling-in-layout # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: app/controllers/users_controller.rb # new file: app/helpers/users_helper.rb # new file: app/views/layouts/_footer.html.erb # new file: app/views/layouts/_header.html.erb # new file: app/views/layouts/_stylesheets.html.erb # modified: app/views/layouts/application.html.erb # modified: app/views/pages/home.html.erb # new file: app/views/users/new.html.erb # modified: config/routes.rb # new file: public/images/logo.png # deleted: public/index.html # new file: public/stylesheets/custom.css # new file: spec/controllers/users_controller_spec.rb # new file: spec/requests/layout_links_spec.rb # $ git commit -m "Finished layout and routes" $ git checkout master $ git merge filling-in-layout
途中から出力略してます。