자습서 14장 사용자 팔로우 - 상태 피드 구현 동기 및 계획(데이터 모델 설명 및 테스트 구현)
7831 단어 Rails 튜토리얼초보자RailsRails5
상태 피드 데이터 모델의 기본
예를 들어, "id 1의 사용자가 id 2, 7, 8, 10의 사용자를 팔로우하고 있다"라고 하는 경우, 피드의 데이터 모델은, microposts
테이블의 샘플 데이터와 세트로 나타내면 다음과 같은 이미지가 됩니다.
위의 화살표는 "현재 사용자 자신과 현재 사용자가 팔로우하는 사용자에 해당하는 사용자 ID를 가진 마이크로 포스트를 검색합니다"라는 작업을 나타냅니다.
상태 피드 요구 사양 및 이에 대한 테스트
상태 피드 요청 사양
어떻게 구현할 것인지를 알아두고,이 시점에서 상태 피드의 요청 사양으로 다음을 나타낼 수 있습니다.
상태 피드 요청 사양
어떻게 구현할 것인지를 알아두고,이 시점에서 상태 피드의 요청 사양으로 다음을 나타낼 수 있습니다.
위의 요구 사양을 어설션으로 확장하여 테스트를 구현해 봅시다.
'상태 피드 표시'라는 기능의 구현 위치
"상태 피드 표시"라는 기능은 User 모델에
feed
메서드로 구현했기 때문입니다. 다음은 현재 app/models/user.rb#feed
의 내용을 보여줍니다.app/models/user.rb#feed
class User < ApplicationRecord
has_many :microposts, dependent: :destroy
# ...略
def feed
Micropost.where("user_id = ?", id)
end
#...略
end
상태 피드 테스트 구현
전제 조건으로 다음 fixture가 있다고 가정합니다.
test/fixtures/relationships.yml
one:
follower: rhakurei
followed: skomeiji
two:
follower: rhakurei
followed: rusami
three:
follower: skomeiji
followed: rhakurei
four:
follower: mkirisame
followed: rhakurei
위의 fixture에서 다음과 같은 관계가 있음을 알 수 있습니다.
이 상황에서는, 「rhakurei의 스테이터스 피드에는, rusami와 rhakurei의 마이크로 포스트는 보이지만, mkirisame의 마이크로 포스트는 보이지 않는다」라고 하는 것이 요구 사양대로의 실장이 됩니다.
테스트 대상은 User 모델이므로 테스트 구현 위치는
test/models/user_test.rb
입니다. 다음은 실제 테스트의 구현 내용입니다.test/models/user_test.rb
require 'test_helper'
class UserTest < ActiveSupport::TestCase
#...略
test "feed should have the right posts" do
rhakurei = users(:rhakurei)
mkirisame = users(:mkirisame)
rusami = users(:rusami)
# フォローしているユーザーの投稿を確認
rusami.microposts.each do |post_following|
assert rhakurei.feed.include?(post_following)
end
# 自分自身の投稿を確認
rhakurei.microposts.each do |post_self|
assert rhakurei.feed.include?(post_self)
end
# フォローしていないユーザーの投稿を確認
mkirisame.microposts.each do |post_unfollowed|
assert_not rhakurei.feed.include?(post_unfollowed)
end
end
end
상태 피드 테스트 구현에 대한 마이크로 포스트 fixture 참고 사항
※상기 테스트 「feed should have the right posts」에서 사용하는 모든 유저에 대해서, 1개 이상의 마이크로 포스트를
test/fixtures/microposts.yml
로 정의해 둘 필요가 있습니다. 마이크로포스트를 정의하지 않은 사용자가 테스트 "feed should have the right posts"에 포함되어 있으면 테스트 "feed should have the right posts"가 제대로 작동하지 않습니다.해당 테스트를 처음 구현한 시점에서 상태 피드 테스트의 동작 결과
현재
test/models/user_test.rb
에 대한 테스트 결과는 다음과 같습니다.# rails test test/models/user_test.rb
Running via Spring preloader in process 127
Started with run options --seed 63017
FAIL["test_feed_should_have_the_right_posts", UserTest, 3.487605000000258]
test_feed_should_have_the_right_posts#UserTest (3.49s)
Expected false to be truthy.
test/models/user_test.rb:103:in `block (2 levels) in <class:UserTest>'
test/models/user_test.rb:102:in `block in <class:UserTest>'
15/15: [=================================] 100% Time: 00:00:04, Time: 00:00:04
Finished in 4.55564s
15 tests, 27 assertions, 1 failures, 0 errors, 0 skips
테스트는 다음 코드로 실패했습니다.
test/models/user_test.rb(102-104행)
rusami.microposts.each do |post_following|
assert rhakurei.feed.include?(post_following)
end
「로그인 유저 자신과는 다른, 팔로우 하고 있는 유저의 마이크로 포스트가 피드에 표시되어 있지 않다」라고 하는 이유로 테스트가 떨어지고 있다, 라고 하는 것이군요.
Reference
이 문제에 관하여(자습서 14장 사용자 팔로우 - 상태 피드 구현 동기 및 계획(데이터 모델 설명 및 테스트 구현)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rapidliner00/items/66e3452f1fd3cc7154f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)