カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

『Ruby on Rails チュートリアル』「第7章 ユーザー登録」3

railstutorial.jp

序文

Railsチュートリアル17日目。

12月とは思えない温かさですねぇ。
忙しいといえば忙しいんですが、もうちょっとなんかアクティブに動いて今年を締めくくりたいところなんですが。

進捗

  • 第7章 ユーザー登録
    • 7.3 ユーザー登録失敗
    • 7.4 ユーザー登録成功

コード実装部分(一部)

/sample_app/test/integration/users_signup_test.rb

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest
  
  test "invalid signup information" do
    # /signupにアクセスする
    # 実際のユーザー操作を模倣している。省略しても一応動く
    get signup_path
    # <form ... action="/signup" ...> というHTMLが存在するか
    assert_select 'form[action="/signup"]'
    
    # ブロック内を実行する前後でUser.countが同値であるかをチェックする
    # (投稿するデータが不正であるため、ユーザー数が増えない)
    assert_no_difference 'User.count' do
      # /usersにpostで不正なデータを送信する 
      post signup_path, params: { user: { name:  "",
                                   email: "user@invalid",
                                   password: "foo",
                                   password_confirmation: "bar" } }
    end
    # users/newに対応するテンプレートが表示されているか
    assert_template 'users/new'
    # <div id="error_explanation">…</div>のようなHTMLが存在するか
    assert_select 'div#error_explanation'
    # <li>{エラーメッセージ}</li>のようなHTMLが存在するか
    assert_select 'li', "Name can't be blank"
    assert_select 'li', 'Email is invalid'
    assert_select 'li', "Password confirmation doesn't match Password"
    assert_select 'li', 'Password is too short (minimum is 6 characters)'
  end
  
  test "valid signup information" do
    # /signupにアクセスする
    get signup_path
    # ブロック内を実行する前後でUser.countが+1違うかをチェックする
    # (投稿するデータが正常であるため、ユーザー数が1増える)
    assert_difference 'User.count', 1 do
      post users_path, params: { user: { name:  "Example User",
                                         email: "user@example.com",
                                         password:              "password",
                                         password_confirmation: "password" } }
    end
    # リダイレクトは明示しないといけないらしい
    follow_redirect!
    # users/show.html.erbのテンプレートが表示されているか
    assert_template 'users/show'
    # flashにメッセージが設定されているか
    assert_not flash.empty?
  end
end

GitHub

github.com

実行結果

f:id:yjkym:20181205153523p:plain

感想

Railsチュートリアル7章3日目。もしくは4日目。

1章を3日で終わらせられれば今年中に終わるなーと皮算用していたのだけど、全然終わらねーじゃねーか。

今日はフォームからユーザーデータを実際に登録してみる部分の実装&テスト。

小さい機能を1つ実装するごとにテストのコードを書いて、また新しい機能を実装して…
ってやるの正しいんだろうけど本当にめんどくさいね。

勉強を進めるほどにRailsって覚えることいっぱいあって難しいなーって思っている。
チュートリアルでやってうのはあくまで基本的な部分で、実践力はまた別につけなきゃいけないだろうしなー。

カロリーメイトください。

今日のunityroom

避けまくれ! | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう
www.youtube.com
シンプルですがゲームデザインが良いですね。