ぞえの技術めも

Ruby on Rails勉強中

【180日目】【1日20分のRailsチュートリアル】【第12章】ステータスフィードのテストを作成する

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

今日は「12.3 ステータスフィード」から。

12.3 ステータスフィード

ついに、サンプルアプリケーションの山頂が目の前に現れました。最後の難関、ステータスフィードの実装に取りかかりましょう。
(中略)
これ実現するためには、RailsRubyの高度な機能の他に、SQLプログラミングの技術も必要です。

今まで作ったものを組み合わせるだけじゃないのか…!
そうか、色んなユーザーのマイクロポストが混ざったフィードを作らないといけないのか。それは今までなかったね。

12.3.1 動機と計画

この目的は、現在のユーザーによってフォローされているユーザーに対応するユーザーidを持つマイクロポストを取り出し、同時に現在のユーザー自身のマイクロポストも一緒に取り出すことです。

フィードにはあるユーザーがフォローしているユーザーとそのユーザー自身のマイクロポストを表示する。Twitterのタイムラインか。

このテストで重要なことは、フィードに必要な3つの条件を満たすことです。
1) フォローしているユーザーのマイクロポストがフィードに含まれていること。2) 自分自身のマイクロポストもフィードに含まれていること。3) フォローしていないユーザーのマイクロポストがフィードに含まれていないこと。

どう実装するかは決まってないけど、テストすることは明確なので先にテストを作成する。

テストユーザーのフォロー関係を意識して、michaelをメインにテストを書いていく感じかな。
post_followingとかってすでに定義したんだっけ…。忘れた…。

test/models/user_test.rb

  test "feed should have the right posts" do
    michael = users(:michael)
    archer  = users(:archer)
    lana    = users(:lana)
    # フォローしているユーザーの投稿を確認
    lana.microposts.each do |post_following|
      assert michael.feed.include?(post_following)
    end
    # 自分自身の投稿を確認
    michael.microposts.each do |post_self|
      assert michael.feed.include?(post_self)
    end
    # フォローしていないユーザーの投稿を確認
    archer.microposts.each do |post_unfollowed|
      assert_not michael.feed.include?(post_unfollowed)
    end
  end

フィードはまだ実装してないのでテストは失敗しますね。

$ bundle exec rake test
  :
 FAIL["test_feed_should_have_the_right_posts", UserTest, 2017-08-23 21:13:41 +0000]
 test_feed_should_have_the_right_posts#UserTest (1503522821.24s)
        Expected false to be truthy.
        test/models/user_test.rb:105:in `block (2 levels) in <class:UserTest>'
        test/models/user_test.rb:104:in `block in <class:UserTest>'
  :

Finished in 2.97709s
74 tests, 334 assertions, 1 failures, 0 errors, 0 skips

今日の学習時間は【23分】

次は「12.3.2 フィードを初めて実装する」から。