心はいつも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

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

  関連記事

40秒も待てない。

自由が丘のカフェでこれ書きました。Table Modern Service、食べ …

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

5.1.2BootstrapとカスタムCSS、です。 今までdivについていたイ …

BD再生のオープンソース

メディアはシリコンすら持ちたくない主義なのですが、どうしてもBluelay Di …

no image
iPhoneのメーラーが真っ黒になってしまった。

iPhoneのメーラーはiPhoneにデフォルトでついているメーラーを使っていま …

no image
RailsTutorial4.0を高速で復習する。5.4.2章の途中から。

リスト5.35 ボタンをユーザー登録ページにリンクする、です。 リンクを貼る系は …

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

7.3ユーザー登録失敗、です。 ここでは、エラーメッセージの表示を実装します。 …

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

3.3.3埋め込みRubyです。viewにrubyコードを埋め込んでtitleを …

no image
MacBookAirにMacAppStoreからソフトをダウンロード

MacBookAir 10日目。快調です。 WindowsからMacの移行でつま …

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

5.3レイアウトのリンク、です。 AboutはRailsらしくない、とおっしゃっ …

no image
ヘルパーメソッドを自作する

便利なrailsのヘルパーメソッド。自分でも作れます。 作るときは、 アプリのd …