【62日目】【1日20分のRailsチュートリアル】【第7章】ユーザー登録失敗時のテストを生成する
今日は「7.3.4 失敗時のテスト」から。
7.3.4 失敗時のテスト
Railsではフォーム用のテストを書くことができ、こういったプロセスを自動化することができます。
本項では、無効な送信をしたときの正しい振る舞いについてテストを書いていきます。
テストを自動化って素晴らしいよね…。自分で色んなパターンを考えて試験だなんてめんどくさいし漏れが出てきそう。。。
まずは、新規ユーザー登録用の統合テストを生成するところから始めていきます。
テストを新しく生成。
$ rails generate integration_test users_signup invoke test_unit create test/integration/users_signup_test.rb
このテストでは、ユーザー登録ボタンを押したときに (ユーザー情報が無効であるために) ユーザーが作成されないことを確認します。
現在のユーザーが0なことを確認。
$ rails console >> User.count => 0
フォーム送信をテストするためには、 users_pathに対してPOSTリクエストを送信する必要があります (表7.1)。
POSTリクエストを送信するテストを書くんですね。
test/integration/users_signup_test.rb
require 'test_helper' class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path, user: { name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" } end assert_template 'users/new' end end
assert_no_differenceメソッドのブロック内でpost関数を使い、メソッドの引数には’User.count’を与えています。
これは、 assert_no_differenceのブロックを実行する前後で引数の値 (User.count) が変わらないことをテストしています。
もしユーザー数が増えたらテスト失敗、ってことかな。
無効なユーザーを登録しようとしているからユーザーは増えない、ってことか。
すでに無効なユーザー登録が失敗する作りになっているのでテストは成功する。
$ bundle exec rake test 20 tests, 41 assertions, 0 failures, 0 errors, 0 skips
今日の作業時間は【20分】。
次は「7.4 ユーザー登録成功」から。