RSpec에서 let_it_be를 사용하여 생성되는 레코드 수를 줄입니다.
let_it_be를 사용하면 생성되는 레코드 수를 줄일 수 있습니다.
해설
이런 books 테이블이 있다고
create_table "books", force: :cascade do |t|
t.string "title"
t.string "description"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
factory 준비
FactoryBot.define do
factory :book do
title { 'hoge' }
description { 'fuga' }
end
end
그런 느낌의 테스트가 있다고 가정합니다.
RSpec.describe do
describe 'Book' do
let!(:book) { create(:book) }
it 'test 1' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
it 'test 2' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
it 'test 3' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
end
end
위의 테스트를 실행하면 총 3회 레코드가 생성됩니다.
검증을 위해,
Book 모델에 after_save 콜백을 설정하여 테스트를 실행합니다.
class Book < ApplicationRecord
after_save :check_create
private
def check_create
p 'created!'
end
end
콜백이 세 번 호출됩니다.
레코드 생성 횟수를 줄이고 싶다!
let_it_be라는 존재를 알았습니다.
젬 저장소
설정
gem 'test-prof'
를 Gemfile에 추가하고 bundle install
rails_helper.rb
에 require 'test_prof/recipes/rspec/let_it_be'
추가
이전 테스트 파일에서
let!(:book) { create(:book) }
let!
let_it_be(:book) { create(:book) }
let_it_be
로 바꾸는 것만
이제 테스트를 실행하려고하면 한 번만 콜백이라고합니다.
소감
테스트가 느려지지 않으려고 노력하고 싶었습니다.
이상입니다.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(RSpec에서 let_it_be를 사용하여 생성되는 레코드 수를 줄입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/WaiChan/items/feb665dafa47db1f46da
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
create_table "books", force: :cascade do |t|
t.string "title"
t.string "description"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
FactoryBot.define do
factory :book do
title { 'hoge' }
description { 'fuga' }
end
end
RSpec.describe do
describe 'Book' do
let!(:book) { create(:book) }
it 'test 1' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
it 'test 2' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
it 'test 3' do
expect(book.title).to eq('hoge')
expect(Book.count).to eq(1)
end
end
end
class Book < ApplicationRecord
after_save :check_create
private
def check_create
p 'created!'
end
end
let!(:book) { create(:book) }
let_it_be(:book) { create(:book) }
Reference
이 문제에 관하여(RSpec에서 let_it_be를 사용하여 생성되는 레코드 수를 줄입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/WaiChan/items/feb665dafa47db1f46da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)