RSpec matchers to be used with the OpenTelemetry framework
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
endYou 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
endemit_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
endSeveral 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.
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
endRSpec Otel ensures compatibility with the currently supported versions of the Ruby Language.