【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현
소개
서비스 품질을 유지하기 위해 필수적인 테스트를 실시하고 있습니다.
이번은 Review 모델편이라고 하는 것으로, 향후 다른 모델에 대해서도 실시해 기사로 해 가고 싶습니다.
※리뷰가 무엇인가에 대해서는 이하 「리뷰 화면」에서 확인하실 수 있습니다.
전제
· 다음 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
실시한 테스트
리뷰 화면
reviews 테이블의 열 소개
xxx_create_reviews.rbclass CreateReviews < ActiveRecord::Migration[6.0]
def change
create_table :reviews do |t|
t.string :content
t.integer :score
t.references :user, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/review.rbclass Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :user_id, presence: true
validates :definition_id, presence: true
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id
end
FactoryBot의 내역
spec/factories/reviews.rbFactoryBot.define do
factory :review do
association :definition
association :user
content {Faker::Lorem.word}
score {'3'}
end
end
테스트 코드 내용
spec/models/review_spec.rbrequire 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
보충 설명
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/6f6a7d1d383d57512d06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 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
실시한 테스트
리뷰 화면
reviews 테이블의 열 소개
xxx_create_reviews.rbclass CreateReviews < ActiveRecord::Migration[6.0]
def change
create_table :reviews do |t|
t.string :content
t.integer :score
t.references :user, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/review.rbclass Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :user_id, presence: true
validates :definition_id, presence: true
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id
end
FactoryBot의 내역
spec/factories/reviews.rbFactoryBot.define do
factory :review do
association :definition
association :user
content {Faker::Lorem.word}
score {'3'}
end
end
테스트 코드 내용
spec/models/review_spec.rbrequire 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
보충 설명
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/6f6a7d1d383d57512d06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
리뷰 화면
reviews 테이블의 열 소개
xxx_create_reviews.rbclass CreateReviews < ActiveRecord::Migration[6.0]
def change
create_table :reviews do |t|
t.string :content
t.integer :score
t.references :user, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/review.rbclass Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :user_id, presence: true
validates :definition_id, presence: true
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id
end
FactoryBot의 내역
spec/factories/reviews.rbFactoryBot.define do
factory :review do
association :definition
association :user
content {Faker::Lorem.word}
score {'3'}
end
end
테스트 코드 내용
spec/models/review_spec.rbrequire 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
보충 설명
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/6f6a7d1d383d57512d06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
xxx_create_reviews.rb
class CreateReviews < ActiveRecord::Migration[6.0]
def change
create_table :reviews do |t|
t.string :content
t.integer :score
t.references :user, foreign_key: true
t.references :definition, foreign_key: true
t.timestamps
end
end
end
모델의 유효성 검사
app/models/review.rbclass Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :user_id, presence: true
validates :definition_id, presence: true
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id
end
FactoryBot의 내역
spec/factories/reviews.rbFactoryBot.define do
factory :review do
association :definition
association :user
content {Faker::Lorem.word}
score {'3'}
end
end
테스트 코드 내용
spec/models/review_spec.rbrequire 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
보충 설명
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/6f6a7d1d383d57512d06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Review < ApplicationRecord
belongs_to :user
belongs_to :definition
validates :user_id, presence: true
validates :definition_id, presence: true
validates :score, presence: true
validates_uniqueness_of :definition_id, scope: :user_id
end
spec/factories/reviews.rb
FactoryBot.define do
factory :review do
association :definition
association :user
content {Faker::Lorem.word}
score {'3'}
end
end
테스트 코드 내용
spec/models/review_spec.rbrequire 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
보충 설명
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/narimiya/items/6f6a7d1d383d57512d06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'rails_helper'
RSpec.describe Review, type: :model do
before do
@review = FactoryBot.build(:review)
end
describe '正常値と異常値の確認' do
context 'reviewモデルのバリデーション' do
it "user_idとdefinition_idがあれば保存できる" do
expect(FactoryBot.create(:definition)).to be_valid
end
it"スコアがなければ保存できない"do
@review.score = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "user_idがなければ無効な状態であること" do
@review.user_id = nil
@review.valid?
expect(@review.errors[:user_id]).to include("を入力してください")
end
it "definition_idがなければ無効な状態であること" do
@review.definition_id = nil
@review.valid?
expect(@review.errors[:definition_id]).to include("を入力してください")
end
end
end
describe "各モデルとのアソシエーション" do
let(:association) do
described_class.reflect_on_association(target)
end
context "Userモデルとのアソシエーション" do
let(:target) { :user }
it "Userとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
context "Definitionモデルとのアソシエーション" do
let(:target) { :definition }
it "Definitionとの関連付けはbelongs_toであること" do
expect(association.macro).to eq :belongs_to
end
end
end
end
테스트 코드의 내용에 대해
・각 밸리데이션에 따라 정상값과 이상값을 확인
· 협회 테스트
이상입니다.
Reference
이 문제에 관하여(【Rails6】 RSpec에 의한 Review의 모델 단위 테스트의 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/narimiya/items/6f6a7d1d383d57512d06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)