RSpec 테스트 코드를 작성하는 방법 (model ver)
8005 단어 RSpec
RSpec을 쓰는 이유는 무엇입니까?
웹 애플리케이션을 배포하기 전에 반드시 테스트 코드를 작성해야 합니다.
프로그램은 예상하지 못한 움직임을 보여줄 가능성이 높습니다.
TV 게임에 비유하면 디버그 작업 같은 느낌입니다.
또, 포트폴리오로서도 RSpec가 되어 있지 않으면 불채용하는 기업도 많습니다.
factory_bot이란?
쉽게 더미의 인스턴스를 작성할 수 있는 Gem입니다.
factory_bot에 더미 데이터를 미리 설정한다.
spec.rb에 이름, 숫자 등을 입력하지만 factory_bot을 작성하여
여러 번 쓰는 것을 막을 수 있습니다.
작성 장소는 spec 디렉토리 바로 아래에 「factories」라고 하는 디렉토리를 추가해, 그 안에 「users.rb」라고 하는 이름으로 파일을 작성해 주세요. 必ず複数形の[s]を入れること!!
spec(폴더)/factories(폴더)/users.rb(파일)
아래는 예입니다.
sample.rb
FactoryBot.define do
factory :user do
nickname {"yamada"}
email {"[email protected]"}
password {"00000000"}
password_confirmation {"00000000"}
end
end
또한 factory_bot을 사용하려면 必ずconfig.include FactoryBot::Syntax::Methodsを記述
해야합니다. 설명 위치는 아래를 참조하십시오.
rails_helper.rb
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryBot::Syntax::Methods #これを記述しないとエラーが出ます
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
모델에 테스트 코드 작성
단어 설명에서합니다.
・describe▼
describe 는, 직후의 do ~ end까지의 테스트의 정리를 만듭니다.
describe 뒤에 오는 ""안에는 그 정리의 설명을 씁니다.
・it와 example▼
it 는 example 이라고 하는 실제로 동작하는 테스트 코드의 정리를 나타냅니다.
it 다음에 오는 ""안에는 그 example의 설명을 씁니다.
・엑스펙테이션▼
실제로 평가되는 표현입니다. it do ~ end 사이에 씁니다.
위의 식에서는 expect(1 + 1).to eq 2 부분이 익스펙테이션입니다.
・expect 방법▼
익스펙테이션의 문법입니다. x 부분에 넣은 식의 값이 Y 부분의 값과 같으면,
테스트가 성공합니다. eq 부분을 Matcha라고합니다.
・마차▼
실험에서 테스트가 성공하는 조건을 나타냅니다. 예를 들어 eq는 "같으면"라는 의미가 됩니다. 그 밖에도
include(포함하면), valid(바리데이션 되면) 등 복수의 매처가 존재합니다.
・valid?메소드▼
valid? 메서드를 사용하면 ActiveRecord::Base를 상속하는 클래스의 인스턴스를 저장할 때 "밸리데이션으로 저장할 수 없는 상태인지"를 확인할 수 있습니다. ~을 할 수 없는 경우는 라고 하는 기술에 사용한다.
記述するコツとしては
①각 example에서 기대하는 값은 1개
②기대하는 결과를 명확하게 알기 쉽게 기술
③ 일어나고 싶은 일과 일어나고 싶지 않은 것 모두를 테스트한다
④ 경계값 테스트
⑤가독성을 생각하면서 적당히 DRY로 한다
아래 샘플을 작성합니다.
sample.rbrequire 'rails_helper'
describe ShippingInfo do #factory_botに記述しているShippingInfoのデータを表している
describe '#create' do # '#create'は登録する際のアクションコントローラーはcreateのため
# 入力されている場合のテスト ▼
it "全ての項目の入力が存在すれば登録できること" do
shipping_info = build(:shipping_info)
expect(shipping_info).to be_valid
end
# nul:false,presence: trueのテスト ▼
it "nameがない場合は登録できないこと" do
item = build(:item, name: nil)
item.valid?
expect(item.errors[:name]).to include("を入力してください")
end
it "priceが300未満は登録できないこと" do
item = build(:item, price: 299)
item.valid?
expect(item.errors[:price]).to include("は300より大きい値にしてください")
end
it "priceが9999999を超過する場合は登録できないこと" do
item = build(:item, price: 10000000)
item.valid?
expect(item.errors[:price]).to include("は9999999より小さい値にしてください")
end
end
end
마지막으로 터미널에서 테스트를 실행합니다.
bundle exec rspec
성공하면 아래와 같이 표시됩니다.
이번에는 기본 RSpec을 게시했지만 더 복잡한 패턴도 있습니다.
도전하고 싶습니다.
Reference
이 문제에 관하여(RSpec 테스트 코드를 작성하는 방법 (model ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yutarou/items/9b6989d5ad420a78d062
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
쉽게 더미의 인스턴스를 작성할 수 있는 Gem입니다.
factory_bot에 더미 데이터를 미리 설정한다.
spec.rb에 이름, 숫자 등을 입력하지만 factory_bot을 작성하여
여러 번 쓰는 것을 막을 수 있습니다.
작성 장소는 spec 디렉토리 바로 아래에 「factories」라고 하는 디렉토리를 추가해, 그 안에 「users.rb」라고 하는 이름으로 파일을 작성해 주세요.
必ず複数形の[s]を入れること!!
spec(폴더)/factories(폴더)/users.rb(파일)
아래는 예입니다.
sample.rb
FactoryBot.define do
factory :user do
nickname {"yamada"}
email {"[email protected]"}
password {"00000000"}
password_confirmation {"00000000"}
end
end
또한 factory_bot을 사용하려면
必ずconfig.include FactoryBot::Syntax::Methodsを記述
해야합니다. 설명 위치는 아래를 참조하십시오.rails_helper.rb
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryBot::Syntax::Methods #これを記述しないとエラーが出ます
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
모델에 테스트 코드 작성
단어 설명에서합니다.
・describe▼
describe 는, 직후의 do ~ end까지의 테스트의 정리를 만듭니다.
describe 뒤에 오는 ""안에는 그 정리의 설명을 씁니다.
・it와 example▼
it 는 example 이라고 하는 실제로 동작하는 테스트 코드의 정리를 나타냅니다.
it 다음에 오는 ""안에는 그 example의 설명을 씁니다.
・엑스펙테이션▼
실제로 평가되는 표현입니다. it do ~ end 사이에 씁니다.
위의 식에서는 expect(1 + 1).to eq 2 부분이 익스펙테이션입니다.
・expect 방법▼
익스펙테이션의 문법입니다. x 부분에 넣은 식의 값이 Y 부분의 값과 같으면,
테스트가 성공합니다. eq 부분을 Matcha라고합니다.
・마차▼
실험에서 테스트가 성공하는 조건을 나타냅니다. 예를 들어 eq는 "같으면"라는 의미가 됩니다. 그 밖에도
include(포함하면), valid(바리데이션 되면) 등 복수의 매처가 존재합니다.
・valid?메소드▼
valid? 메서드를 사용하면 ActiveRecord::Base를 상속하는 클래스의 인스턴스를 저장할 때 "밸리데이션으로 저장할 수 없는 상태인지"를 확인할 수 있습니다. ~을 할 수 없는 경우는 라고 하는 기술에 사용한다.
記述するコツとしては
①각 example에서 기대하는 값은 1개
②기대하는 결과를 명확하게 알기 쉽게 기술
③ 일어나고 싶은 일과 일어나고 싶지 않은 것 모두를 테스트한다
④ 경계값 테스트
⑤가독성을 생각하면서 적당히 DRY로 한다
아래 샘플을 작성합니다.
sample.rbrequire 'rails_helper'
describe ShippingInfo do #factory_botに記述しているShippingInfoのデータを表している
describe '#create' do # '#create'は登録する際のアクションコントローラーはcreateのため
# 入力されている場合のテスト ▼
it "全ての項目の入力が存在すれば登録できること" do
shipping_info = build(:shipping_info)
expect(shipping_info).to be_valid
end
# nul:false,presence: trueのテスト ▼
it "nameがない場合は登録できないこと" do
item = build(:item, name: nil)
item.valid?
expect(item.errors[:name]).to include("を入力してください")
end
it "priceが300未満は登録できないこと" do
item = build(:item, price: 299)
item.valid?
expect(item.errors[:price]).to include("は300より大きい値にしてください")
end
it "priceが9999999を超過する場合は登録できないこと" do
item = build(:item, price: 10000000)
item.valid?
expect(item.errors[:price]).to include("は9999999より小さい値にしてください")
end
end
end
마지막으로 터미널에서 테스트를 실행합니다.
bundle exec rspec
성공하면 아래와 같이 표시됩니다.
이번에는 기본 RSpec을 게시했지만 더 복잡한 패턴도 있습니다.
도전하고 싶습니다.
Reference
이 문제에 관하여(RSpec 테스트 코드를 작성하는 방법 (model ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yutarou/items/9b6989d5ad420a78d062
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'rails_helper'
describe ShippingInfo do #factory_botに記述しているShippingInfoのデータを表している
describe '#create' do # '#create'は登録する際のアクションコントローラーはcreateのため
# 入力されている場合のテスト ▼
it "全ての項目の入力が存在すれば登録できること" do
shipping_info = build(:shipping_info)
expect(shipping_info).to be_valid
end
# nul:false,presence: trueのテスト ▼
it "nameがない場合は登録できないこと" do
item = build(:item, name: nil)
item.valid?
expect(item.errors[:name]).to include("を入力してください")
end
it "priceが300未満は登録できないこと" do
item = build(:item, price: 299)
item.valid?
expect(item.errors[:price]).to include("は300より大きい値にしてください")
end
it "priceが9999999を超過する場合は登録できないこと" do
item = build(:item, price: 10000000)
item.valid?
expect(item.errors[:price]).to include("は9999999より小さい値にしてください")
end
end
end
bundle exec rspec
Reference
이 문제에 관하여(RSpec 테스트 코드를 작성하는 방법 (model ver)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yutarou/items/9b6989d5ad420a78d062텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)