RSpec Otel
RSpec matchers to be used with the OpenTelemetry framework
Installation
Add this line to your Gemfile:
gem 'rspec-otel'
Within your spec helper, require the gem:
require 'rspec_otel'
And include the matchers within the rspec configuration:
RSpec.configure do |config|
config.include RspecOtel::Matchers
end
Usage
Matching the presence of a span
You can match the emission of a span with the emit_span
matcher:
require 'spec_helper'
RSpec.describe 'User API' do
it 'emits a span' do
expect do
get :user, id: 1
end.to emit_span('GET /user')
end
end
emit_span
will also match a regular expression:
require 'spec_helper'
RSpec.describe 'User API' do
it 'emits a span' do
expect do
get :user, id: 1
end.to emit_span(/^GET /)
end
end
Several conditions can be added to the matcher:
as_root
- Will match spans that are the root of a trace.as_child
- Will match spans that are not the root of a tracewith_attributes
- Will match only the spans with the specified attributes.without_attributes
- Will only match the spans that do not have the specified attributeswith_event
- Will match only the spans with the specified event.without_event
- Will only match the spans that do not have the specified eventwith_link
- Will match only the spans with the specified link.without_link
- Will only match the spans that do not have the specified linkwith_status
- Will match only the spans that have the proper status.with_exception
- Will match only the spans that have the specified exception event.without_exception
- Will match only the spans that do not have the specified exception event.
The *_event
condition can be called multiple times with different events.
Disabling
We wrap every example in a new OpenTelemetry SDK configuration by default, if you wish to disable this you can tag your example with :rspec_otel_disable_tracing
:
require 'spec_helper'
RSpec.describe 'User API', :rspec_otel_disable_tracing do
it 'tests my code' do
expect(true).to be true
end
end
Compatibility
RSpec Otel ensures compatibility with the currently supported versions of the
Ruby Language.