在开始介绍如何测试 repository 之前,要先带过有使用的一些套件
本系列文章以 Rspec 作为测试用的框架,并且有使用 FactoryBot 来建立测资。
如此专案中的 repository 测试可以通用化成
# repository_spec.rb
RSpec.shared_examples 'a repository' do
describe '.save' do
it 'create record by entity' do
repo.save(entity)
actual_entity = repo.find_by_identity(identity)
expect(actual_entity.to_h).to include(entity.to_h)
end
end
describe '.destroy' do
it 'destroy record by identity' do
repo.save(entity)
repo.destroy(entity)
actual_entity = repo.find_by_identity(identity)
expect(actual_entity).to be_nil
end
end
end
而 domain 内的 repository 测试则写成
# user_repository_spec.rb
require 'rails_helper'
RSpec.describe Repositories::Order do
it_behaves_like 'a repository' do
let(:entity) { build_entity }
let(:identity) { build_identity }
let(:repo) { described_class.new }
end
private
def build_entity
create(
:entity_order,
serial_number: 'ABC-1234567890',
status: :refunded,
puchased_at: Time.zone.now,
comment: '测试',
)
end
def build_identity
{
serial_number: 'ABC-1234567890',
}
end
end
# factory/order.rb
FactoryBot.define do
factory :entity_order, class: 'Entities::Order' do
serial_number { nil }
statu s{ nil }
puchased_at { nil }
comment { nil }
skip_create
initialize_with { new(attributes) }
end
这样一来,只需要定义好 entity 测资,便可以快速地建立测试,降低建立基础建设的时间。
下一篇将分享团队讨论过关於 DAL 的问题,以及目前的结论。
<<: [Day 16] Data! — 资料就是我的超能力
D3js 浪漫突进的回顾及展望 你只要顾好你会的、你喜欢的,一直讲、拼命讲,展现你的魅力! -- 浪...
现场决定之後那天刚好是10/12 然後正式工作的时间是10/22 在那边之前我需要到其他公司进行教育...
您的订阅是我制作影片的动力 订阅点这里~ 影片程序码(延续昨天) #步骤一: na补值&相异...
前言 Hi 我是一名普通的 iOS 开发者,兴趣使然的 UI 设计师。不小心参与了几年 iOS 开发...
正文 前几天开始在弄Kubernetes相关LAB的时候不是很顺手,因为这台笔电平常很少使用,所以常...