Domain-driven acceptance testing for Ruby.
Same test, every adapter. Define behavior once, verify it at unit, HTTP, and browser levels.
# Gemfile
gem "averspec"require "averspec"
class TaskBoard < Aver::Domain
domain_name "task-board"
action :create_task
assertion :task_in_status
end
class TaskBoardUnit < Aver::Adapter
domain TaskBoard
protocol :unit, -> { {} }
def create_task(board, title:, status: "backlog")
board[title] = status
end
def task_in_status(board, title:, status:)
raise "expected #{status}" unless board[title] == status
end
end
Aver.register TaskBoardUnit# spec/task_board_spec.rb
require "averspec/rspec"
RSpec.describe TaskBoard do
it "creates a task in backlog" do
ctx.when.create_task(title: "Fix bug")
ctx.then.task_in_status(title: "Fix bug", status: "backlog")
end
endaver run # run all specs
aver run --adapter unit # filter by adapter
aver approve # update approval baselines
aver init # scaffold a new domainaverspec.dev · Architecture · Example App
MIT