心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。5.4章。

   


5.4ユーザー登録: 最初のステップ、です。ようやく開発っぽくなってきます。

5.4.1Usersコントローラ、です。
今までは静的ページだけだったのですが、いよいよデータモデルも作ります。
最初はサービスを利用するユーザーのモデルからです。

Usersコントローラをrails g

モデルからではなくコントローラーから作っていますね。

リスト5.29 Usersコントローラの生成 (newアクションを追加)。

rails g controller Users new --no-test-framework

users_controller.rbの中にnewアクションがあるものと、newのviewができました。

全部作ればいいのに、と思いますが、あくまでもチュートリアルなのと、
アジャイルだからですね。ユーザー登録機能からまず作っていきます。

ユーザー登録のURLを/users/new ではなく/signup にしたい

URLの要求仕様です。いまコントローラーができた状態では、
http://localhost:3000/users/new
でアクセスできています。

これを
http://localhost:3000/signup にしたいんですね。

5.4.2 ユーザー登録用URL、です。

ユーザー登録のテストを書く

仕様が明確になったところで、ますテストです。
これはrails gする前にやってもよかったかも。
まずは試験票といいますかテストを作ります。

rails g integration_test user_pages

spec/requests/user_pages_spec.rb ができます。
デフォルトで生成される内容はこうでした。

require ‘spec_helper’

describe “UserPages” do
describe “GET /user_pages” do
it “works! (now write some real specs)” do
# Run the generator again with the –webrat flag if you want to use webrat methods/matchers
get user_pages_index_path
response.status.should be(200)
end
end
end

リスト5.32 ユーザー登録ページへのテストを含む、ユーザー用の最初のspec。
spec/requests/user_pages_spec.rb

require 'spec_helper'

describe "ユーザーページのテスト" do

  subject { page }
 let(:base_title) { "Ruby on Rails Tutorial Sample App" }

  describe "signupページのテスト" do
    before { visit signup_path }
  #'Sign up'の文字がコンテンツにある。
    it { should have_content('Sign up') }
  #サブタイトルが'Sign up'である。
    it { should have_title("#{base_title} | Sign up" }
  end
end

当然テストは失敗します。

bundle exec rspec spec/requests/user_pages_spec.rb

1) ユーザーページのテスト signupページのテスト
Failure/Error: before { visit signup_path }
NameError:
undefined local variable or method `signup_path’ for #
# ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in

2) ユーザーページのテスト signupページのテスト
Failure/Error: before { visit signup_path }
NameError:
undefined local variable or method `signup_path’ for #
# ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in

ルートを実装する

テストコード、users/newでできているのに、いきなりsignup_path にアクセスしろ、とかいてあるので、実装もそうします。

さて、RailsTutorialでは、なぜかここでsignup_path設定をリスト7.3 に先延ばししていますが、
(まだnewしか作っていないから?)fakeのままではムダなので、キチンと実装します。

リスト7.3 Usersリソースをroutesファイルに追加する。
config/routes.rb

SampleApp::Application.routes.draw do
  resources :users
  match '/signup',  to: 'users#new',            via: 'get'
  .
  .
  .
end

当然テストはまだ失敗しますが、

bundle exec rspec spec/requests/user_pages_spec.rb

エラーの理由からundefined local variable or method `signup_path’ はなくなりました。

1) ユーザーページのテスト signupページのテスト
Failure/Error: it { should have_content(‘Sign up’) }
expected #has_content?(“Sign up”) to return true, got false
# ./spec/requests/user_pages_spec.rb:11:in `block (3 levels) in

2) ユーザーページのテスト signupページのテスト
Failure/Error: it { should have_title(“#{base_title} | Sign up”) }
expected #has_title?(“Ruby on Rails Tutorial Sample App | Sign up”) to return true, got false
# ./spec/requests/user_pages_spec.rb:13:in `block (3 levels) in

ユーザー登録ページのview

リスト5.34 最初のユーザー登録ページ (スタブ)。
app/views/users/new.html.erb

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<p>Find me in app/views/users/new.html.erb</p>

タイトル、コンテンツがきちんとできたのでテストは成功します。

bundle exec rspec spec/requests/user_pages_spec.rb

2 examples, 0 failuresでした。

5.4.2 ユーザー登録用URL、の途中ですがいったんここでコミットしておきます。
次は、
リスト5.35 ボタンをユーザー登録ページにリンクする。
からです。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
Ruby on Railsのインストール

Rubyのアップデートが終わったので、いよいよRailsをインストールします。 …

no image
RailsTutorial4.0を高速で復習する。3.2.2章。

静的ページにaboutというページを追加するのですが、rails gを先にするの …

MacBookAirにMavericksインストールしました

先週の話になってしまいますが、MacBookAirにMavericksインストー …

no image
Rubyの<< には3つの用法あり。

先週の#yokohamarbペアプロ画面をみていて

RailsTutorial4.0を高速で復習する。5章。

さてRailsTutorial4.0も5章に入ります。まだ序の口です。5章ではb …

Macにコマンドラインツールをインストールする

Mac miniのメモリが16Mになったので、気分も新たに、Ruby on Ra …

実機なしでRetina 3.5インチのスクリーンショットを撮る

iPhoneアプリ公開時に2種類の画像登録が必要です。 1つ目はアイコン。アプリ …

no image
「Follow me」バッジのつけ方。

ブログの横についている「Follow me」バッジ。いろんな方がつけているのを見 …

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

no image
RailsTutorial4.0を高速で復習する。9.1.2章。

9.1.2編集の失敗、です。 テストを書きます リスト9.9 ユーザーupdat …