【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현
소개
서비스 품질을 유지하기 위해 필수적인 테스트를 실시하고 있습니다.
이번은 Like 모델편이라고 하는 것으로, 향후 다른 모델에 대해서도 실시해 기사로 해 가고 싶습니다.
전제
· 다음 gem은 설치됨
gem 'rspec-rails', '~> 4.0.0'
gem 'factory_bot_rails'
gem 'faker'
・좋아요 기능 실장 완료
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트
likes 테이블의 열 소개
xxx_create_likes.rbclass CreateLikes < ActiveRecord::Migration[6.0]
def change
create_table :likes do |t|
t.references :user, foreign_key: true
t.references :answer, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/like.rbclass Like < ApplicationRecord
belongs_to :user
belongs_to :answer
belongs_to :definition
validates :user_id, presence: true
validates :answer_id, uniqueness: { scope: :user_id }, presence: true
validates :definition_id, uniqueness: { scope: :user_id }, presence: true
end
FactoryBot의 내역
spec/factories/likes.rbFactoryBot.define do
factory :like do
association :answer
association :definition
user { answer.user }
end
end
테스트 코드 내용
spec/models/like_spec.rb
require 'rails_helper'
RSpec.describe Like, type: :model do
before do
@like = FactoryBot.build(:like)
end
describe '正常値と異常値の確認' do
context 'likeモデルのバリデーション' do
it "user_idとanswer_id、definition_idがあれば保存できる" do
expect(FactoryBot.create(:like)).to be_valid
end
it "user_idがなければ無効な状態であること" do
@like.user_id = nil
@like.valid?
expect(@like.errors[:user_id]).to include("を入力してください")
end
it "answer_idがなければ無効な状態であること" do
@like.answer_id = nil
@like.valid?
expect(@like.errors[:answer_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@like.definition_id = nil
@like.valid?
expect(@like.errors[:definition_id]).to include("を入力してください")
end
it "answer_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, answer_id: like.answer_id)).to be_valid
end
it "definition_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, definition_id: like.definition_id)).to be_valid
end
it "user_idが同じでもanswer_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, user_id: like.user_id)).to be_valid
end
end
end
end
보충 설명
Factorybot의 asociation 메소드 정보
객체 (user 객체, answer 객체, definition 객체)를 서로 연결하는 데 사용됩니다.
예)
아래와 같이 answer 객체에 대한 설명을 하기 위해서는 user 객체에 대한 정보를 기술해야 합니다.
like_spec.rbuser = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
association 메소드를 사용하는 것으로, 오브젝트끼리의 관련짓을 할 수 있으므로, 이하와 같이 1행으로의 기술로 끝낼 수가 있습니다.
like_spec.rbanswer = FactoryBot.create(:answer)
Factorybot user { answer.user } 정보
자세한 것은 이하 URL보다.
htps : // 코 m / 료가 _ 아오 ym / ms / 741c57 에 266 9d811 2d4
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/708023931f4590901f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· 다음 gem은 설치됨
gem 'rspec-rails', '~> 4.0.0'
gem 'factory_bot_rails'
gem 'faker'
・좋아요 기능 실장 완료
버전
루비 버전 ruby-2.6.5
Rails 버전 Rails:6.0.0
rspec-rails 4.0.0
실시한 테스트
likes 테이블의 열 소개
xxx_create_likes.rbclass CreateLikes < ActiveRecord::Migration[6.0]
def change
create_table :likes do |t|
t.references :user, foreign_key: true
t.references :answer, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/like.rbclass Like < ApplicationRecord
belongs_to :user
belongs_to :answer
belongs_to :definition
validates :user_id, presence: true
validates :answer_id, uniqueness: { scope: :user_id }, presence: true
validates :definition_id, uniqueness: { scope: :user_id }, presence: true
end
FactoryBot의 내역
spec/factories/likes.rbFactoryBot.define do
factory :like do
association :answer
association :definition
user { answer.user }
end
end
테스트 코드 내용
spec/models/like_spec.rb
require 'rails_helper'
RSpec.describe Like, type: :model do
before do
@like = FactoryBot.build(:like)
end
describe '正常値と異常値の確認' do
context 'likeモデルのバリデーション' do
it "user_idとanswer_id、definition_idがあれば保存できる" do
expect(FactoryBot.create(:like)).to be_valid
end
it "user_idがなければ無効な状態であること" do
@like.user_id = nil
@like.valid?
expect(@like.errors[:user_id]).to include("を入力してください")
end
it "answer_idがなければ無効な状態であること" do
@like.answer_id = nil
@like.valid?
expect(@like.errors[:answer_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@like.definition_id = nil
@like.valid?
expect(@like.errors[:definition_id]).to include("を入力してください")
end
it "answer_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, answer_id: like.answer_id)).to be_valid
end
it "definition_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, definition_id: like.definition_id)).to be_valid
end
it "user_idが同じでもanswer_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, user_id: like.user_id)).to be_valid
end
end
end
end
보충 설명
Factorybot의 asociation 메소드 정보
객체 (user 객체, answer 객체, definition 객체)를 서로 연결하는 데 사용됩니다.
예)
아래와 같이 answer 객체에 대한 설명을 하기 위해서는 user 객체에 대한 정보를 기술해야 합니다.
like_spec.rbuser = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
association 메소드를 사용하는 것으로, 오브젝트끼리의 관련짓을 할 수 있으므로, 이하와 같이 1행으로의 기술로 끝낼 수가 있습니다.
like_spec.rbanswer = FactoryBot.create(:answer)
Factorybot user { answer.user } 정보
자세한 것은 이하 URL보다.
htps : // 코 m / 료가 _ 아오 ym / ms / 741c57 에 266 9d811 2d4
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/708023931f4590901f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
likes 테이블의 열 소개
xxx_create_likes.rbclass CreateLikes < ActiveRecord::Migration[6.0]
def change
create_table :likes do |t|
t.references :user, foreign_key: true
t.references :answer, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/like.rbclass Like < ApplicationRecord
belongs_to :user
belongs_to :answer
belongs_to :definition
validates :user_id, presence: true
validates :answer_id, uniqueness: { scope: :user_id }, presence: true
validates :definition_id, uniqueness: { scope: :user_id }, presence: true
end
FactoryBot의 내역
spec/factories/likes.rbFactoryBot.define do
factory :like do
association :answer
association :definition
user { answer.user }
end
end
테스트 코드 내용
spec/models/like_spec.rb
require 'rails_helper'
RSpec.describe Like, type: :model do
before do
@like = FactoryBot.build(:like)
end
describe '正常値と異常値の確認' do
context 'likeモデルのバリデーション' do
it "user_idとanswer_id、definition_idがあれば保存できる" do
expect(FactoryBot.create(:like)).to be_valid
end
it "user_idがなければ無効な状態であること" do
@like.user_id = nil
@like.valid?
expect(@like.errors[:user_id]).to include("を入力してください")
end
it "answer_idがなければ無効な状態であること" do
@like.answer_id = nil
@like.valid?
expect(@like.errors[:answer_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@like.definition_id = nil
@like.valid?
expect(@like.errors[:definition_id]).to include("を入力してください")
end
it "answer_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, answer_id: like.answer_id)).to be_valid
end
it "definition_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, definition_id: like.definition_id)).to be_valid
end
it "user_idが同じでもanswer_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, user_id: like.user_id)).to be_valid
end
end
end
end
보충 설명
Factorybot의 asociation 메소드 정보
객체 (user 객체, answer 객체, definition 객체)를 서로 연결하는 데 사용됩니다.
예)
아래와 같이 answer 객체에 대한 설명을 하기 위해서는 user 객체에 대한 정보를 기술해야 합니다.
like_spec.rbuser = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
association 메소드를 사용하는 것으로, 오브젝트끼리의 관련짓을 할 수 있으므로, 이하와 같이 1행으로의 기술로 끝낼 수가 있습니다.
like_spec.rbanswer = FactoryBot.create(:answer)
Factorybot user { answer.user } 정보
자세한 것은 이하 URL보다.
htps : // 코 m / 료가 _ 아오 ym / ms / 741c57 에 266 9d811 2d4
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/708023931f4590901f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class CreateLikes < ActiveRecord::Migration[6.0]
def change
create_table :likes do |t|
t.references :user, foreign_key: true
t.references :answer, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
app/models/like.rb
class Like < ApplicationRecord
belongs_to :user
belongs_to :answer
belongs_to :definition
validates :user_id, presence: true
validates :answer_id, uniqueness: { scope: :user_id }, presence: true
validates :definition_id, uniqueness: { scope: :user_id }, presence: true
end
FactoryBot의 내역
spec/factories/likes.rbFactoryBot.define do
factory :like do
association :answer
association :definition
user { answer.user }
end
end
테스트 코드 내용
spec/models/like_spec.rb
require 'rails_helper'
RSpec.describe Like, type: :model do
before do
@like = FactoryBot.build(:like)
end
describe '正常値と異常値の確認' do
context 'likeモデルのバリデーション' do
it "user_idとanswer_id、definition_idがあれば保存できる" do
expect(FactoryBot.create(:like)).to be_valid
end
it "user_idがなければ無効な状態であること" do
@like.user_id = nil
@like.valid?
expect(@like.errors[:user_id]).to include("を入力してください")
end
it "answer_idがなければ無効な状態であること" do
@like.answer_id = nil
@like.valid?
expect(@like.errors[:answer_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@like.definition_id = nil
@like.valid?
expect(@like.errors[:definition_id]).to include("を入力してください")
end
it "answer_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, answer_id: like.answer_id)).to be_valid
end
it "definition_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, definition_id: like.definition_id)).to be_valid
end
it "user_idが同じでもanswer_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, user_id: like.user_id)).to be_valid
end
end
end
end
보충 설명
Factorybot의 asociation 메소드 정보
객체 (user 객체, answer 객체, definition 객체)를 서로 연결하는 데 사용됩니다.
예)
아래와 같이 answer 객체에 대한 설명을 하기 위해서는 user 객체에 대한 정보를 기술해야 합니다.
like_spec.rbuser = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
association 메소드를 사용하는 것으로, 오브젝트끼리의 관련짓을 할 수 있으므로, 이하와 같이 1행으로의 기술로 끝낼 수가 있습니다.
like_spec.rbanswer = FactoryBot.create(:answer)
Factorybot user { answer.user } 정보
자세한 것은 이하 URL보다.
htps : // 코 m / 료가 _ 아오 ym / ms / 741c57 에 266 9d811 2d4
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/708023931f4590901f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FactoryBot.define do
factory :like do
association :answer
association :definition
user { answer.user }
end
end
spec/models/like_spec.rb
require 'rails_helper'
RSpec.describe Like, type: :model do
before do
@like = FactoryBot.build(:like)
end
describe '正常値と異常値の確認' do
context 'likeモデルのバリデーション' do
it "user_idとanswer_id、definition_idがあれば保存できる" do
expect(FactoryBot.create(:like)).to be_valid
end
it "user_idがなければ無効な状態であること" do
@like.user_id = nil
@like.valid?
expect(@like.errors[:user_id]).to include("を入力してください")
end
it "answer_idがなければ無効な状態であること" do
@like.answer_id = nil
@like.valid?
expect(@like.errors[:answer_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@like.definition_id = nil
@like.valid?
expect(@like.errors[:definition_id]).to include("を入力してください")
end
it "answer_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, answer_id: like.answer_id)).to be_valid
end
it "definition_idが同じでもuser_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, definition_id: like.definition_id)).to be_valid
end
it "user_idが同じでもanswer_idが違うと保存できる" do
like = FactoryBot.create(:like)
expect(FactoryBot.create(:like, user_id: like.user_id)).to be_valid
end
end
end
end
보충 설명
Factorybot의 asociation 메소드 정보
객체 (user 객체, answer 객체, definition 객체)를 서로 연결하는 데 사용됩니다.
예)
아래와 같이 answer 객체에 대한 설명을 하기 위해서는 user 객체에 대한 정보를 기술해야 합니다.
like_spec.rbuser = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
association 메소드를 사용하는 것으로, 오브젝트끼리의 관련짓을 할 수 있으므로, 이하와 같이 1행으로의 기술로 끝낼 수가 있습니다.
like_spec.rbanswer = FactoryBot.create(:answer)
Factorybot user { answer.user } 정보
자세한 것은 이하 URL보다.
htps : // 코 m / 료가 _ 아오 ym / ms / 741c57 에 266 9d811 2d4
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/708023931f4590901f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
user = FactoryBot.create(:user)
answer = FactoryBot.create(:answer, user: user)
answer = FactoryBot.create(:answer)
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Like의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/narimiya/items/708023931f4590901f42텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)