心はいつも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
RailsGirlsMore!でRailsTutorialのキモチワルイところがスッキリしました

RailsGirls松江からのぉ〜東京More!*既に2回目から1ヶ月半。またま …

no image
MacBookAir 1日め

ようやくMacBookAir を購入しました。Dellノートがずっと調子悪かった …

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

8.2.5ユーザー登録と同時にサインインする、です。 ユーザーが登録を行った後、 …

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

さて、4.1章の途中にある、変だなと思っている箇所、 リスト4.4 Homeペー …

詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム

Objective-Cの解説はメッセージから始まる。このメッセージという概念、も …

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

11.2.4[フォローする] ボタン (標準的な方法)、です。 仕様 それぞれの …

Mac mini買いました。

Appleの新製品発表が近づいているというのに、Mac mini買ってしまいまし …

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

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

Objective-C苦節3ヶ月アプリ作れるようになった

このブログairpucci.comのメニューにアプリ開発追加しました。 昨年秋よ …

no image
MacBookAirで真央ちゃんのテレビ放映を見ました

テレビ持っていないを公言しています。 15年以上使っていたナショナル6型ブラウン …