Skip to content

Commit 4864a45

Browse files
committed
Helpers for e2e tests
1 parent 269df71 commit 4864a45

File tree

3 files changed

+62
-54
lines changed

3 files changed

+62
-54
lines changed

spec/features/tracing_spec.rb

Lines changed: 4 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@
1111

1212
events_data = get_rails_events
1313

14-
expect(events_data["event_count"]).to be > 0
14+
expect(events_data[:event_count]).to be > 0
1515

16-
error_events = events_data["events"].select { |event| event["exception"] }
16+
error_events = events_data[:events].select { |event| event["exception"] }
1717
expect(error_events).not_to be_empty
1818

1919
error_event = error_events.first
2020
exception_values = error_event.dig("exception", "values")
2121
expect(exception_values).not_to be_empty
2222
expect(exception_values.first["type"]).to eq("ZeroDivisionError")
2323

24-
transaction_events = events_data["events"].select { |event| event["type"] == "transaction" }
24+
transaction_events = events_data[:events].select { |event| event["type"] == "transaction" }
2525

2626
expect(error_event.dig("contexts", "trace")).not_to be_nil
2727
error_trace_id = error_event.dig("contexts", "trace", "trace_id")
@@ -47,7 +47,7 @@
4747
end
4848
end
4949

50-
events_data["envelopes"].each do |envelope|
50+
events_data[:envelopes].each do |envelope|
5151
envelope["items"].each do |item|
5252
if item["payload"] && item["payload"]["_meta"] && item["payload"]["_meta"]["dsc"]
5353
dsc = item["payload"]["_meta"]["dsc"]
@@ -59,54 +59,4 @@
5959
end
6060
end
6161
end
62-
63-
private
64-
65-
def get_rails_events
66-
log_file_path = File.join(Dir.pwd, "log", "sentry_debug_events.log")
67-
68-
return { "events" => [], "envelopes" => [], "event_count" => 0, "envelope_count" => 0 } unless File.exist?(log_file_path)
69-
70-
events = []
71-
File.readlines(log_file_path).each do |line|
72-
line = line.strip
73-
next if line.empty?
74-
75-
begin
76-
events << JSON.parse(line)
77-
rescue JSON::ParserError => e
78-
puts "Failed to parse line: #{line}, error: #{e.message}"
79-
end
80-
end
81-
82-
extracted_events = []
83-
envelopes = []
84-
85-
events.each do |event_data|
86-
envelopes << {
87-
"headers" => event_data["envelope_headers"],
88-
"items" => event_data["items"]
89-
}
90-
91-
# Extract actual events from envelope items
92-
event_data["items"].each do |item|
93-
if item["headers"]["type"] == "event"
94-
extracted_events << item["payload"]
95-
end
96-
end
97-
end
98-
99-
{
100-
"events" => extracted_events,
101-
"envelopes" => envelopes,
102-
"event_count" => extracted_events.length,
103-
"envelope_count" => envelopes.length,
104-
"raw_events" => events
105-
}
106-
end
107-
108-
def clear_rails_events
109-
log_file_path = File.join(Dir.pwd, "log", "sentry_debug_events.log")
110-
File.write(log_file_path, "") if File.exist?(log_file_path)
111-
end
11262
end

spec/spec_helper.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
require "capybara"
99
require "capybara/rspec"
1010

11+
require_relative "support/test_helper"
12+
1113
Capybara.configure do |config|
1214
config.default_driver = :selenium_headless_chrome
1315
config.javascript_driver = :selenium_headless_chrome
@@ -29,4 +31,12 @@
2931

3032
RSpec.configure do |config|
3133
config.include(Capybara::DSL, type: :e2e)
34+
35+
config.include(Test::Helper)
36+
37+
config.before(:suite) do
38+
Test::Helper.perform_basic_setup do |config|
39+
config.transport.transport_class = Sentry::DebugTransport
40+
end
41+
end
3242
end

spec/support/test_helper.rb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# frozen_string_literal: true
2+
3+
module Test
4+
module Helper
5+
module_function
6+
7+
def get_rails_events
8+
extracted_events = []
9+
envelopes = []
10+
11+
logged_envelopes.each do |event_data|
12+
envelopes << {
13+
"headers" => event_data["envelope_headers"],
14+
"items" => event_data["items"]
15+
}
16+
17+
event_data["items"].each do |item|
18+
if item["headers"]["type"] == "event"
19+
extracted_events << item["payload"]
20+
end
21+
end
22+
end
23+
24+
{
25+
events: extracted_events,
26+
envelopes: envelopes,
27+
event_count: extracted_events.length,
28+
envelope_count: envelopes.length
29+
}
30+
end
31+
32+
def logged_envelopes
33+
Sentry.get_current_client.transport.logged_envelopes
34+
end
35+
36+
# TODO: move this to a shared helper for all gems
37+
def perform_basic_setup
38+
Sentry.init do |config|
39+
config.sdk_logger = Logger.new(nil)
40+
config.dsn = Sentry::TestHelper::DUMMY_DSN
41+
config.transport.transport_class = Sentry::DummyTransport
42+
# so the events will be sent synchronously for testing
43+
config.background_worker_threads = 0
44+
yield(config) if block_given?
45+
end
46+
end
47+
end
48+
end

0 commit comments

Comments
 (0)