【180日目】【1日20分のRailsチュートリアル】【第12章】ステータスフィードのテストを作成する
今日は「12.3 ステータスフィード」から。
12.3 ステータスフィード
ついに、サンプルアプリケーションの山頂が目の前に現れました。最後の難関、ステータスフィードの実装に取りかかりましょう。
(中略)
これ実現するためには、RailsとRubyの高度な機能の他に、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 フィードを初めて実装する」から。