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

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

  関連記事

WordPressのテンプレートを自分で作ってみました

ブログ更新は久々になりました。この2週間、ずっとこのブログ用にWordPress …

Ruby1.9+Rails3.2に加えて、Ruby2.0+Rails4.0のプロジェクトを作る。

Ruby1.9+Rails3.2のプロジェクトは作りましたが、その後、Ruby2 …

パーフェクトRuby 2章Rubyの基礎 2-8 様々な代入式

p66 2-8-1 多重代入 まとめて代入する横着なやり方。 a,b = 1,2 …

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

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

no image
WindowsのiTunesからMacのiTunesへのデータ移行

MacBookAir 2日め。なかなかMacにふみきれなかったのは、Window …

no image
Vaio Pよりも軽く感じる?MacBookAirとお出かけ

Vaoi Pを手放し、iPadも手放し、UQ Wimaxは解約し、DellのWi …

パーフェクトRuby 2章Rubyの基礎 2-2 変数と定数

p47 2-2-1 ローカル変数 スコープは ・ブロック内 ・メソッド定義内 ・ …

no image
RailsのRoutingいろいろ

コントローラーがAbc アクションがactrionxだとして、 http://y …

no image
ToDoの管理方法

東大生はノートがきれいだとか、、 きれいに書いている暇があったら、頭に書いて覚え …

Mac mini買いました。

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