Module: AppMap::RSpec

Defined in:
lib/appmap/rspec.rb

Overview

Integration of AppMap with RSpec. When enabled with APPMAP=true, the AppMap tracer will be activated around each scenario which has the metadata key ‘:appmap`.

Defined Under Namespace

Classes: Recording, ScopeExample, ScopeExampleGroup

Constant Summary collapse

APPMAP_OUTPUT_DIR =
'tmp/appmap/rspec'
LOG =
false

Class Method Summary collapse

Class Method Details

.add_event_methods(event_methods) ⇒ Object



165
166
167
# File 'lib/appmap/rspec.rb', line 165

def add_event_methods(event_methods)
  @event_methods += event_methods
end

.begin_spec(example) ⇒ Object



150
151
152
# File 'lib/appmap/rspec.rb', line 150

def begin_spec(example)
  @recordings_by_example[example.object_id] = Recording.new(example)
end

.configObject



161
162
163
# File 'lib/appmap/rspec.rb', line 161

def config
  @config or raise "AppMap is not configured"
end

.enabled?Boolean

Returns:

  • (Boolean)


202
203
204
# File 'lib/appmap/rspec.rb', line 202

def enabled?
  ENV['APPMAP'] == 'true'
end

.end_spec(example, exception:) ⇒ Object



154
155
156
157
158
159
# File 'lib/appmap/rspec.rb', line 154

def end_spec(example, exception:)
  recording = @recordings_by_example.delete(example.object_id)
  return warn "No recording found for #{example}" unless recording

  recording.finish exception
end

.initObject



144
145
146
147
148
# File 'lib/appmap/rspec.rb', line 144

def init
  warn 'Configuring AppMap recorder for RSpec'

  FileUtils.mkdir_p APPMAP_OUTPUT_DIR
end

.metadataObject



13
14
15
# File 'lib/appmap/rspec.rb', line 13

def self.
  AppMap.
end

.runObject



206
207
208
# File 'lib/appmap/rspec.rb', line 206

def run
  init
end

.save(name:, class_map:, source_location:, test_status:, exception:, events:) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
# File 'lib/appmap/rspec.rb', line 169

def save(name:, class_map:, source_location:, test_status:, exception:, events:)
   = AppMap::RSpec..tap do |m|
    m[:name] = name
    m[:source_location] = source_location
    m[:app] = AppMap.configuration.name
    m[:frameworks] ||= []
    m[:frameworks] << {
      name: 'rspec',
      version: Gem.loaded_specs['rspec-core']&.version&.to_s
    }
    m[:recorder] = {
      name: 'rspec'
    }
    m[:test_status] = test_status
    if exception
      m[:exception] = {
        class: exception.class.name,
        message: AppMap::Event::MethodEvent.display_string(exception.to_s)
      }
    end
  end

  appmap = {
    version: AppMap::APPMAP_FORMAT_VERSION,
    metadata: ,
    classMap: class_map,
    events: events
  }.compact
  fname = AppMap::Util.scenario_filename(name)

  AppMap::Util.write_appmap(File.join(APPMAP_OUTPUT_DIR, fname), JSON.generate(appmap))
end