【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현
소개
서비스 품질을 유지하기 위해 필수적인 테스트를 실시하고 있습니다.
이번에는 사용자 팔로우 기능의 결합 테스트를 구현하고 그 구현 내용을 기사로 해 나가고 싶습니다.
전제
· Relationship (팔로우) 모델의 단위 테스트는 실시 완료
※완료되어 있지 않은 분이나 단체 테스트와 병행해 보시고 싶은 분은, 이하의 Relationship 모델의 단체 테스트에 관한 기사를 참고해 주세요.
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트
사용자 목록 화면 정보
악수 마크를 클릭하면 비동기 팔로우가 실행됩니다.
relationships 테이블의 열 소개
xxx_create_relationships.rbclass CreateRelationships < ActiveRecord::Migration[6.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
end
end
모델의 유효성 검사
app/models/relationship.rbclass Relationship < ApplicationRecord
belongs_to :follower, class_name: 'User'
belongs_to :followed, class_name: 'User'
validates :follower_id, presence: true, uniqueness: { scope: :followed_id }
validates :followed_id, presence: true
end
FactoryBot의 내역
spec/factories/rerationships.rbFactoryBot.define do
factory :relationship do
follower_id { FactoryBot.create(:user).id }
followed_id { FactoryBot.create(:user).id }
end
end
지원 모듈
spec/support/sign_in_support.rbmodule SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
테스트 코드 내용
spec/system/relationships_spec.rbrequire 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· Relationship (팔로우) 모델의 단위 테스트는 실시 완료
※완료되어 있지 않은 분이나 단체 테스트와 병행해 보시고 싶은 분은, 이하의 Relationship 모델의 단체 테스트에 관한 기사를 참고해 주세요.
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트
사용자 목록 화면 정보
악수 마크를 클릭하면 비동기 팔로우가 실행됩니다.
relationships 테이블의 열 소개
xxx_create_relationships.rbclass CreateRelationships < ActiveRecord::Migration[6.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
end
end
모델의 유효성 검사
app/models/relationship.rbclass Relationship < ApplicationRecord
belongs_to :follower, class_name: 'User'
belongs_to :followed, class_name: 'User'
validates :follower_id, presence: true, uniqueness: { scope: :followed_id }
validates :followed_id, presence: true
end
FactoryBot의 내역
spec/factories/rerationships.rbFactoryBot.define do
factory :relationship do
follower_id { FactoryBot.create(:user).id }
followed_id { FactoryBot.create(:user).id }
end
end
지원 모듈
spec/support/sign_in_support.rbmodule SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
테스트 코드 내용
spec/system/relationships_spec.rbrequire 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사용자 목록 화면 정보
악수 마크를 클릭하면 비동기 팔로우가 실행됩니다.
relationships 테이블의 열 소개
xxx_create_relationships.rbclass CreateRelationships < ActiveRecord::Migration[6.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
end
end
모델의 유효성 검사
app/models/relationship.rbclass Relationship < ApplicationRecord
belongs_to :follower, class_name: 'User'
belongs_to :followed, class_name: 'User'
validates :follower_id, presence: true, uniqueness: { scope: :followed_id }
validates :followed_id, presence: true
end
FactoryBot의 내역
spec/factories/rerationships.rbFactoryBot.define do
factory :relationship do
follower_id { FactoryBot.create(:user).id }
followed_id { FactoryBot.create(:user).id }
end
end
지원 모듈
spec/support/sign_in_support.rbmodule SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
테스트 코드 내용
spec/system/relationships_spec.rbrequire 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
xxx_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[6.0]
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
end
end
모델의 유효성 검사
app/models/relationship.rbclass Relationship < ApplicationRecord
belongs_to :follower, class_name: 'User'
belongs_to :followed, class_name: 'User'
validates :follower_id, presence: true, uniqueness: { scope: :followed_id }
validates :followed_id, presence: true
end
FactoryBot의 내역
spec/factories/rerationships.rbFactoryBot.define do
factory :relationship do
follower_id { FactoryBot.create(:user).id }
followed_id { FactoryBot.create(:user).id }
end
end
지원 모듈
spec/support/sign_in_support.rbmodule SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
테스트 코드 내용
spec/system/relationships_spec.rbrequire 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Relationship < ApplicationRecord
belongs_to :follower, class_name: 'User'
belongs_to :followed, class_name: 'User'
validates :follower_id, presence: true, uniqueness: { scope: :followed_id }
validates :followed_id, presence: true
end
spec/factories/rerationships.rb
FactoryBot.define do
factory :relationship do
follower_id { FactoryBot.create(:user).id }
followed_id { FactoryBot.create(:user).id }
end
end
지원 모듈
spec/support/sign_in_support.rbmodule SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
테스트 코드 내용
spec/system/relationships_spec.rbrequire 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
module SignInSupport
def sign_in(user)
visit user_session_path
fill_in 'user[email]', with: user.email
fill_in 'user[password]', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq(root_path)
end
end
spec/system/relationships_spec.rb
require 'rails_helper'
RSpec.describe "Relationships", type: :system do
before do
@user1 = FactoryBot.create(:user)
@user2 = FactoryBot.create(:user)
end
describe '#create,#destroy' do
it 'ユーザーをフォロー、フォロー解除できる' do
# @user1としてログイン
sign_in(@user1)
# @user1としてユーザー一覧ページへ遷移する
visit users_path(@user1)
# @user2をフォローする
find('#no-follow').click
expect(page).to have_selector '#yes-follow'
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
# @user2をフォロー解除する
find('#yes-follow').click
expect(page).to have_selector '#no-follow'
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
end
end
end
보충 설명
'user2 팔로우' 테스트 코드 정보
아래의 전반의 행에서는, user1이 user2 팔로우하면, user2의 팔로워수가 1 오른다는 의미의 문법입니다.
한편, 후반의 행에서는 user1이 user2 팔로우하면, user1의 팔로우수가 1 오른다는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
'user2 팔로우 해제' 테스트 코드 정보
「user2를 팔로우한다」의 테스트 코드의 반대의 의미가 있어, 팔로우 해제하면 카운트수가 1 줄어들기 때문에 0이 된다고 하는 의미의 문법입니다.
spec/system/relationships_spec.rb expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
이상입니다.
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/fa458dde5621f733ea06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
expect(@user2.followed.count).to eq(1)
expect(@user1.follower.count).to eq(1)
expect(@user2.followed.count).to eq(0)
expect(@user1.follower.count).to eq(0)
Reference
이 문제에 관하여(【Rails6】RSpec에 의한 팔로우 기능의 결합 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/narimiya/items/fa458dde5621f733ea06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)