心はいつも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
railsのエラーメッセージを日本語化

message:で渡すエラーメッセージや、その他いろんな箇所を日本語化します。 …

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

7.6演習 1問目です。 リスト7.30のコードを使用して、7.1.4で定義され …

ラクダと蛇(キャメルとスネーク、Camel&Snake)

蛇。 いきなりラクダと蛇ってなんぞやー!と思う人と、あ、それかと思う人。後者はプ …

no image
@で始まるのが インスタンス変数

@ で始まるのが インスタンス変数 大文字で始まるのが 定数 文法書のどこに書い …

パーフェクトRuby 2章Rubyの基礎 2-1 Hello,Ruby

12章から5章まではPart2 Ruby言語仕様 です。 2章 Rubyの基礎 …

no image
ブログのデザイン開発、着手から完成まで今日1日でやります

久々のブログです。 昨日アクセス解析も1年ぶりに見たのですが、何がなくとも一定の …

民●党批判したら検索順位が落ちたのか?

このブログ、airpucciのドメインも元のwww.airpucci.comに戻 …

no image
accepts_nested_attributes_for

everydayRailsやっていて、 phoneモデルのテストのところで ac …

no image
恐ろしや、WordPressのDBパスワードは平文でおいてある

先ほどサーバーのDBをいじっていてですね、、久々だったのでDBパスワード忘れてし …

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

3.6高度なセットアップ、です。 この節を飛ばしても次の章以降には何の影響もあり …