ぞえの技術めも

Ruby on Rails勉強中

【109日目】【1日20分のRailsチュートリアル】【第9章】ユーザーインデックスのテストを追加する

Ruby on Railsチュートリアル(第3版)

今日は「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 パーシャルのリファクタリング」から。