失敗時のテスト
有効、無効のデータどちらでも正常にアプリが動くようにする。
アプリケーションの変更をするたびにテストを繰り返さなければならず大変である。
Railsではフォーム用のテストを書くことができ、こういったプロセスを自動化することができる。
今回は無効の送信をした時に正しい振る舞いについてテストを書いていく。
新規ユーザー登録用の統合テストを生成する
統合テストのファイル名はusers_signup
rails generate integration_test users_signup
無効なユーザー登録に対するテスト
test/integration/users_signup_test.rb
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
# signupのページにアクセス
assert_no_difference 'User.count' do
# ユーザー数が変わらないかをテストする
post users_path, params: { user: { name: "",
# ハッシュのハッシュのようになっているように見える
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
# postリクエストを送信 フォーム送信をテストする
# データの投稿した後 assert_no_difference で違いを比べるらしい。
end
assert_template 'users/new'
end
end
テストは、ユーザ数を覚えた後にデータを投稿してみて、ユーザ数が変わらないかどうかを検証するテスト
ubuntu:~/environment/sample_app (sign-up) $ rails t
Running via Spring preloader in process 8623
Started with run options --seed 50070
20/20: [==============================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.38444s
20 tests, 40 assertions, 0 failures, 0 errors, 0 skips
テスト成功
演習
1.リスト 7.20で実装したエラーメッセージに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト 7.25にテンプレートを用意しておいたので、参考にしてください。
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
# signupのページにアクセス
assert_no_difference 'User.count' do
# ユーザー数が変わらないかをテストする
post users_path, params: { user: { name: "",
# ハッシュのハッシュのようになっているように見える
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
# postリクエストを送信 フォーム送信をテストする
# データの投稿した後 assert_no_difference で違いを比べるらしい。
end
assert_template 'users/new'
assert_select 'div#error_explanation'
assert_select 'div.alert'
end
end
ちょっとわからない。 解けなかった。