railsチュートリアル第１３章 プロフィール画面のマイクロポストをテストする

###プロフィール画面のマイクロポストをテストする
プロフィール画面で表示されるマイクロポストに対して、統合テストを書いていきます。

```
ubuntu:~/environment/sample_app (user-microposts) $ rails generate integration_test users_profile
Running via Spring preloader in process 6991
      invoke  test_unit
      create    test/integration/users_profile_test.rb
```

####生成されたマイクロポストfixture
test/fixtures/microposts.yml

```yml
orange:
  content: "I just ate an orange!"
  created_at: <%= 10.minutes.ago %>
  user: michael
  # ユーザーfixtureにある対応ユーザーに関連付けることをRailsに指示できます。

tau_manifesto:
  content: "Check out the @tauday site by @mhartl: https://tauday.com"
  created_at: <%= 3.years.ago %>
  user: michael

cat_video:
  content: "Sad cats are sad: https://youtu.be/PKffm2uI4dk"
  created_at: <%= 2.hours.ago %>
  user: michael

most_recent:
  content: "Writing a short test"
  created_at: <%= Time.zone.now %>
  user: michael
  
<% 30.times do |n| %>
micropost_<%= n %>:
  content: <%= Faker::Lorem.sentence(word_count: 5) %>
  created_at: <%= 42.days.ago %>
  user: michael
<% end %>
```

####Userプロフィール画面に対するテスト
test/integration/users_profile_test.rb

```rb
require 'test_helper'

class UsersProfileTest < ActionDispatch::IntegrationTest
  include ApplicationHelper

  def setup
    @user = users(:michael)
    # テストユーザーを設定
  end

  test "profile display" do
    get user_path(@user)
    # ユーザーページに行くを要求
    assert_template 'users/show'
    # showアクションを表示されるか？
    # ユーザーページが表示されているか？
    assert_select 'title', full_title(@user.name)
    # ユーザーページのタイトルタグにユーザー名が表示されているか？
    assert_select 'h1', text: @user.name
    # h１タグにユーザー名が表示されているか？
    assert_select 'h1>img.gravatar'
    # h1タグ（トップレベルの見出し）の内側にある、gravatarクラス付きのimgタグがあるかどうかをチェックできます。
    assert_match @user.microposts.count.to_s, response.body
    # response.bodyにはそのページの完全なHTMLが含まれています
    # そのページのどこかしらにマイクロポストの投稿数が存在するのであれば、
    #   次のように探し出してマッチできる
    assert_select 'div.pagination'
    # ページネーションが表示されているか？
    @user.microposts.paginate(page: 1).each do |micropost|
      assert_match micropost.content, response.body
      # マイクロポストがあるかどうか？
    end
  end
end
```
#####テスト
```
ubuntu:~/environment/sample_app (user-microposts) $ rails t
Running via Spring preloader in process 8880
Started with run options --seed 3883

  54/54: [============================] 100% Time: 00:00:09, Time: 00:00:09

Finished in 9.41028s
54 tests, 288 assertions, 0 failures, 0 errors, 0 skips
```
###演習
1.
リスト 13.28にある２つの'h1'のテストが正しいか確かめるため、該当するアプリケーション側のコードをコメントアウトしてみましょう。テストが green から red に変わることを確認してみてください。

```
ubuntu:~/environment/sample_app (user-microposts) $ rails t
Running via Spring preloader in process 9267
Started with run options --seed 35939

 FAIL["test_profile_display", #<Minitest::Reporters::Suite:0x000055f1ec686990 @name="UsersProfileTest">, 1.963515799000561]
 test_profile_display#UsersProfileTest (1.96s)
        <Michael Example> expected but was
        <>..
        Expected 0 to be >= 1.
        test/integration/users_profile_test.rb:19:in `block in <class:UsersProfileTest>'

  54/54: [============================] 100% Time: 00:00:02, Time: 00:00:02

Finished in 2.55123s
54 tests, 224 assertions, 1 failures, 0 errors, 0 skips
```

2.
リスト 13.28にあるテストを変更して、will_paginateが１度のみ表示されていることをテストしてみましょう。ヒント: 表 5.2を参考にしてください。

```rb
 assert_select 'h1>img.gravatar'
    # h1タグ（トップレベルの見出し）の内側にある、
    #   gravatarクラス付きのimgタグがあるかどうかをチェックできます。
    assert_match @user.microposts.count.to_s, response.body
    # response.bodyにはそのページの完全なHTMLが含まれています
    # そのページのどこかしらにマイクロポストの投稿数が存在するのであれば、
    #   次のように探し出してマッチできる
    assert_select 'div.pagination'
    # ページネーションが表示されているか？
    assert_select 'div.pagination', count:1
    @user.microposts.paginate(page: 1).each do |micropost|
      assert_match micropost.content, response.body
      # マイクロポストがあるかどうか？
    end
  end
end
```
<%= will_paginate renderer: BootstrapPagination::Rails %>
とすると
ページネーションのスタイルが変わるらしい。