RailsTutorial4.0を高速で復習する。7.2章
7.2ユーザー登録フォーム、です。
ユーザー認証も登録も、モデルは作ってあるので、viewとcontorollerを作ります。
登録ページのイメージ
こういうイメージにする、って毎回絵で描いてあるのもRailsTutorialのいいところです。
name,email,password,confirmatin全部モデル作ってあります。
ここでDBリセットしています。
bundle exec rake db:reset
データがなくなるので、現在無いデータを表示できないために画面はエラーになっています。
7.2.1ユーザー登録のためのテスト、です。
カピバラさんの機能でテストを書く
ユーザー登録フォームの表示が失敗しないかどうか、そしてページを表示し、ボタンを押し、無効なデータを送信する動作をシミュレートすることです。
ということがCapybaraさんはできるそうな。
リスト7.16 ユーザー登録の基本的なテスト。
spec/requests/user_pages_spec.rb
require 'spec_helper' describe "User pages" do subject { page } . . . describe "signup" do before { visit signup_path } let(:submit) { "Create my account" } describe "with invalid information" do it "should not create a user" do expect { click_button submit }.not_to change(User, :count) end end describe "with valid information" do before do fill_in "Name", with: "Example User" fill_in "Email", with: "user@example.com" fill_in "Password", with: "foobar" fill_in "Confirmation", with: "foobar" end it "should create a user" do expect { click_button submit }.to change(User, :count).by(1) end end end end
viewのテストなんてあまり要らない宣言後のためか、もう書いてしまったタイトルやコンテンツ文字に対するテストが削除されていたりします。
カピバラさんでclickボタンを押してみて結果を見る記述もあります。
テストはエラーです。
1) ユーザーページのテスト signupページのテスト 入力が正しくないとき ボタンを押してもuserを作成しない
Failure/Error: expect { click_button submit }.not_to change(User, :count)
Capybara::ElementNotFound:
Unable to find button “Create my account”
# ./spec/requests/user_pages_spec.rb:28:in `block (5 levels) in‘
# ./spec/requests/user_pages_spec.rb:28:in `block (4 levels) in‘ 2) ユーザーページのテスト signupページのテスト 正しい入力のとき ボタンを押してuserを作成する
Failure/Error: fill_in “Name”, with: “Example User”
Capybara::ElementNotFound:
Unable to find field “Name”
ユーザー登録の入力フォームを作成する
リスト7.17 新しいユーザーを登録するフォーム。
app/views/users/new.html.erb
<% provide(:title, 'Sign up') %> <h1>Sign up</h1> <div class="row"> <div class="span6 offset3"> <%= form_for(@user) do |f| %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :email %> <%= f.text_field :email %> <%= f.label :password %> <%= f.password_field :password %> <%= f.label :password_confirmation, "Confirmation" %> <%= f.password_field :password_confirmation %> <%= f.submit "Create my account", class: "btn btn-large btn-primary" %> <% end %> </div> </div>
余計なタグが入っているのはbootstrapのためです。素直にhtmlで書いた方がわかりやすいのでは、、と思っていましたがだいぶなれてきました。
contorollerも作成します。
リスト7.18 @user変数をnewアクションに追加する。
app/controllers/users_controller.rb
class UsersController < ApplicationController . . . def new @user = User.new end end
RailsTutorial誤植か?
さて、ここで
bundle exec rspec spec/requests/user_pages_spec.rb -e "signup page"
とすれば、パスするというのですが、確かにエラーは無いのですが0examples 0failureです。
(この-eオプションは、descriptionの文字列が”signup page”に一致する例を単に実行するためのものです。ここで注意していただきたいのは、これは “signup” という部分文字列とは違うということです。もし”signup” であればリスト7.16のすべてのテストが実行されるでしょう。)
bundle exec rspec spec/requests/user_pages_spec.rb -e “signup page” で、
-e “signup page”オプションを指定して、user_pages_spec.rbの部分実行をしています。
が、
リスト7.16 で
describe “signup” do
ってなっているので、
-e “signup page”というキーワード指定では引っかかってくれません。
テストスクリプトが
describe “signup page” doの間違いでは?誤植?
あるいは、コマンドを
bundle exec rspec spec/requests/user_pages_spec.rb -e “signup”
にするとか。
テストスクリプトをdescribe “signup page” doに変更してみたら、-e “signup page”でdescribe “signup page”を引っ張って実行してくれました。
しかし、エラー。
Failure/Error: expect { click_button submit }.not_to change(User, :count)
AbstractController::ActionNotFound:
The action ‘create’ could not be found for UsersController
という。
ボタンを押してcreateまで行っている感じ。createはまだ実装していないので当然エラーに。
stackoverflowに同じ質問が。Michael Hartlが答えていて、失敗でオk、続けろと言っています。この質問者のコマンドが
rspec spec/requests/user_pages_spec.rb -e “signup page”
なのか普通にrspec specなのか書いていないので、わからない。
誤植とテキストのまずい点がうまい具合に重なってしまい、わからない。
ま、
createが無いのでエラーは当然の結果なので続けます。
あー納得がいかないと思いつつCSSを書き足してこの章はおしまいにします。
リスト7.19 ユーザー登録フォームのCSS。
app/assets/stylesheets/custom.css.scss
略 /* forms */ input, textarea, select, .uneditable-input { border: 1px solid #bbb; width: 100%; padding: 10px; margin-bottom: 15px; @include box_sizing; } input { height: auto !important; }
7.2.3フォームHTML、は生成されたHTMLの解説です。飛ばします。
大事なのはここですね。
ユーザーの作成で重要なのはinputごとにある特殊なname属性です。
Railsはこれらのnameの値を使用して、初期化ハッシュを (params変数経由で) 構成しす。このハッシュは、ユーザーが入力した値に基づいてユーザーを作成するときに使用されます。
次は、
7.3ユーザー登録失敗
からです。
関連記事
-
-
パーフェクトRuby 3章制御構造/メソッド/組み込み関数 3-1演算子
パーフェクトRuby2章の後は6章をやろうと思っていましたが、やっぱり順番にやっ …
-
-
吉瀬美智子さんが美しすぎて、新サイト作りました
以前からやりたいと思っていたのですが、吉瀬美智子さんが美しすぎてやる気がでました …
-
-
テンプレとヘルパーの順番
http://yourdomain/actionxを呼んだときのactionx用 …
-
カスペルスキーを使っています
PCのウィルススキャンは、多くの人が使っているかと思います。 大手3社のソフトを …
-
-
MacBookAirの容量が足りない
当ブログairpucciで人気なのがMacBookAirに関するエントリ。ありが …
-
-
RailsTutorial4.0を高速で復習する。3.2.2章。
静的ページにaboutというページを追加するのですが、rails gを先にするの …
-
-
Ruby 1.9系をインストールする
Rubyのバージョン管理ができるrbenvをインストールしたらいよいよRubyの …
-
-
future vision 2019 vs 2010
マイクロソフトのfuture visonが話題らしい。 2019年の近未来。 情 …
-
-
retweetボタンを追加してみました
最近いろんなブログで見かけるretweetボタン。ブログのエントリーについている …
-
-
メタプログラミングRuby第1章
初めてのRuby2章と8章をやったところで、メタプログラミングRubyに進みます …