【109日目】【1日20分のRailsチュートリアル】【第9章】ユーザーインデックスのテストを追加する
今日は「9.3.4 ユーザーインデックスのテスト」から。
9.3.4 ユーザーインデックスのテスト
今回のテストでは、ログイン、indexページにアクセス、最初のページにユーザーがいることを確認、ページネーションのリンクがあることを確認、といった順でテストしていきます。
ページネーションに関するテストを追加する。
リスト9.20で2人目のユーザーをfixtureに追加しましたが、今回はもっと多くのユーザーを作成する必要があります。
fixtureでも埋め込みRubyとやらが使えるらしいのでコード書いてテストユーザーを追加する。
コピペでできなくはないにしろ、もし31人以上のテストユーザーを手作業で追加しろとか言われたら拷問だよね……。(単純作業きらい)
test/fixtures/users.yml
lana: name: Lana Kane email: hands@example.gov password_digest: <%= User.digest('password') %> mallory: name: Mallory Archer email: boss@example.gov password_digest: <%= User.digest('password') %> <% 30.times do |n| %> user_<%= n %>: name: <%= "User #{n}" %> email: <%= "user-#{n}@example.com" %> password_digest: <%= User.digest('password') %> <% end %>
今後必要になるらしいので名前付きユーザー(“lana"と"mallory”)も追加。
リスト9.43のfixtureファイルができたので、indexページに対するテストを書いてみます。まずは、いつものように統合テストを生成します。
統合テストを生成。
$ rails generate integration_test users_index invoke test_unit create test/integration/users_index_test.rb
今回のテストでは、paginationクラスを持ったdivタグをチェックして、最初のページにユーザーがいることを確認します。
1ページ目にユーザーがいる(リンクとはユーザー名が表示されている)ことをテストする。
うーん、何のテストかは何となく分かるけど一からは書けない。。。
test/integration/users_index_test.rb
require 'test_helper' class UsersIndexTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "index including pagination" do log_in_as(@user) get users_path assert_template 'users/index' assert_select 'div.pagination' User.paginate(page: 1).each do |user| assert_select 'a[href=?]', user_path(user), text: user.name end end end
テストが通ることを確認。
$ bundle exec rake test 37 tests, 117 assertions, 0 failures, 0 errors, 0 skips
今日の学習時間は【19分】。
次は「9.3.5 パーシャルのリファクタリング」から。