From 821e806a077a81dbb5aecbc10733cfd2960b54e4 Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Mon, 26 Oct 2026 19:44:51 +0000 Subject: [PATCH 1/5] Add additional data to messages generated during skipped or pending steps --- CHANGELOG.md | 2 ++ lib/cucumber/core/test/result/pending.rb | 4 +++- lib/cucumber/core/test/result/raisable.rb | 10 ++++++++++ lib/cucumber/core/test/result/skipped.rb | 4 +++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6593070..79b8a65f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ This document is formatted according to the principles of [Keep A CHANGELOG](htt Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blob/master/CONTRIBUTING.md) for more info on how to contribute to Cucumber. ## [Unreleased] +### Changed +- Add additional parameters (`message` and `exception`), to the message generated by pending or skipped test steps ## [20.0.0] - 2026-10-09 ### Changed diff --git a/lib/cucumber/core/test/result/pending.rb b/lib/cucumber/core/test/result/pending.rb index 03b156d0..dc5be7e7 100644 --- a/lib/cucumber/core/test/result/pending.rb +++ b/lib/cucumber/core/test/result/pending.rb @@ -31,7 +31,9 @@ def to_sym def to_message Cucumber::Messages::TestStepResult.new( status: Cucumber::Messages::TestStepResultStatus::PENDING, - duration: duration.to_message_duration + duration: duration.to_message_duration, + message: message, + exception: exception_submessage ) end end diff --git a/lib/cucumber/core/test/result/raisable.rb b/lib/cucumber/core/test/result/raisable.rb index 8d33d63c..675f209e 100644 --- a/lib/cucumber/core/test/result/raisable.rb +++ b/lib/cucumber/core/test/result/raisable.rb @@ -39,6 +39,16 @@ def with_filtered_backtrace(filter) filter.new(dup).exception end + + private + + def exception_submessage + Cucumber::Messages::Exception.new( + type: self.class, + message: message, + stack_trace: backtrace.join("\n") + ) + end end end end diff --git a/lib/cucumber/core/test/result/skipped.rb b/lib/cucumber/core/test/result/skipped.rb index c69edb64..76d6cbb9 100644 --- a/lib/cucumber/core/test/result/skipped.rb +++ b/lib/cucumber/core/test/result/skipped.rb @@ -31,7 +31,9 @@ def to_sym def to_message Cucumber::Messages::TestStepResult.new( status: Cucumber::Messages::TestStepResultStatus::SKIPPED, - duration: duration.to_message_duration + duration: duration.to_message_duration, + message: message, + exception: exception_submessage ) end end From 5bdc8cc2e6d5b3c600983676b44399312578bd8e Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Mon, 26 Oct 2026 19:46:49 +0000 Subject: [PATCH 2/5] Handle nil backtraces for semi-positive results --- lib/cucumber/core/test/result/raisable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cucumber/core/test/result/raisable.rb b/lib/cucumber/core/test/result/raisable.rb index 675f209e..c92ace44 100644 --- a/lib/cucumber/core/test/result/raisable.rb +++ b/lib/cucumber/core/test/result/raisable.rb @@ -46,7 +46,7 @@ def exception_submessage Cucumber::Messages::Exception.new( type: self.class, message: message, - stack_trace: backtrace.join("\n") + stack_trace: backtrace ? backtrace.join("\n") : 'N/A' ) end end From 5f8903fd3ec87ff59a0b90bbc145dc0c7447ba06 Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Fri, 30 Oct 2026 16:31:41 +0000 Subject: [PATCH 3/5] Handle nil backtrace --- lib/cucumber/core/test/result/pending.rb | 2 +- lib/cucumber/core/test/result/raisable.rb | 4 ++-- lib/cucumber/core/test/result/skipped.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cucumber/core/test/result/pending.rb b/lib/cucumber/core/test/result/pending.rb index dc5be7e7..6ef34bb6 100644 --- a/lib/cucumber/core/test/result/pending.rb +++ b/lib/cucumber/core/test/result/pending.rb @@ -33,7 +33,7 @@ def to_message status: Cucumber::Messages::TestStepResultStatus::PENDING, duration: duration.to_message_duration, message: message, - exception: exception_submessage + exception: exception_sub_message ) end end diff --git a/lib/cucumber/core/test/result/raisable.rb b/lib/cucumber/core/test/result/raisable.rb index c92ace44..7b24b9a6 100644 --- a/lib/cucumber/core/test/result/raisable.rb +++ b/lib/cucumber/core/test/result/raisable.rb @@ -42,11 +42,11 @@ def with_filtered_backtrace(filter) private - def exception_submessage + def exception_sub_message Cucumber::Messages::Exception.new( type: self.class, message: message, - stack_trace: backtrace ? backtrace.join("\n") : 'N/A' + stack_trace: backtrace&.join("\n") ) end end diff --git a/lib/cucumber/core/test/result/skipped.rb b/lib/cucumber/core/test/result/skipped.rb index 76d6cbb9..39c62d81 100644 --- a/lib/cucumber/core/test/result/skipped.rb +++ b/lib/cucumber/core/test/result/skipped.rb @@ -33,7 +33,7 @@ def to_message status: Cucumber::Messages::TestStepResultStatus::SKIPPED, duration: duration.to_message_duration, message: message, - exception: exception_submessage + exception: exception_sub_message ) end end From aef829ce122c3f5d455f456992bb88513f225931 Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Fri, 30 Oct 2026 17:01:28 +0000 Subject: [PATCH 4/5] Add in variation for 2 situations (message present and not) In situations where it is not present, we need to omit both it and exception Change the message value passed to JUST be the raw message Default the message to `nil` now so it will omit this when not required --- lib/cucumber/core/test/result/pending.rb | 19 +++++++++++++------ lib/cucumber/core/test/result/raisable.rb | 2 +- lib/cucumber/core/test/result/skipped.rb | 19 +++++++++++++------ lib/cucumber/core/test/runner.rb | 9 +-------- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/lib/cucumber/core/test/result/pending.rb b/lib/cucumber/core/test/result/pending.rb index 6ef34bb6..664d6258 100644 --- a/lib/cucumber/core/test/result/pending.rb +++ b/lib/cucumber/core/test/result/pending.rb @@ -29,12 +29,19 @@ def to_sym end def to_message - Cucumber::Messages::TestStepResult.new( - status: Cucumber::Messages::TestStepResultStatus::PENDING, - duration: duration.to_message_duration, - message: message, - exception: exception_sub_message - ) + if message + Cucumber::Messages::TestStepResult.new( + status: Cucumber::Messages::TestStepResultStatus::PENDING, + duration: duration.to_message_duration, + message: message, + exception: exception_sub_message + ) + else + Cucumber::Messages::TestStepResult.new( + status: Cucumber::Messages::TestStepResultStatus::PENDING, + duration: duration.to_message_duration + ) + end end end end diff --git a/lib/cucumber/core/test/result/raisable.rb b/lib/cucumber/core/test/result/raisable.rb index 7b24b9a6..6448f563 100644 --- a/lib/cucumber/core/test/result/raisable.rb +++ b/lib/cucumber/core/test/result/raisable.rb @@ -11,7 +11,7 @@ module Result class Raisable < StandardError attr_reader :message, :duration - def initialize(message = '', duration = UnknownDuration.new, backtrace = nil) + def initialize(message = nil, duration = UnknownDuration.new, backtrace = nil) @message = message @duration = duration super(message) diff --git a/lib/cucumber/core/test/result/skipped.rb b/lib/cucumber/core/test/result/skipped.rb index 39c62d81..356ff64e 100644 --- a/lib/cucumber/core/test/result/skipped.rb +++ b/lib/cucumber/core/test/result/skipped.rb @@ -29,12 +29,19 @@ def to_sym end def to_message - Cucumber::Messages::TestStepResult.new( - status: Cucumber::Messages::TestStepResultStatus::SKIPPED, - duration: duration.to_message_duration, - message: message, - exception: exception_sub_message - ) + if message + Cucumber::Messages::TestStepResult.new( + status: Cucumber::Messages::TestStepResultStatus::SKIPPED, + duration: duration.to_message_duration, + message: message, + exception: exception_sub_message + ) + else + Cucumber::Messages::TestStepResult.new( + status: Cucumber::Messages::TestStepResultStatus::SKIPPED, + duration: duration.to_message_duration + ) + end end end end diff --git a/lib/cucumber/core/test/runner.rb b/lib/cucumber/core/test/runner.rb index 85612e15..1239a85d 100644 --- a/lib/cucumber/core/test/runner.rb +++ b/lib/cucumber/core/test/runner.rb @@ -114,7 +114,7 @@ def to_test_step_finished_envelope(test_step, step_result) result_message = Cucumber::Messages::TestStepResult.new( status: result_message.status, duration: result_message.duration, - message: to_error_message(message_element), + message: result_message.message, exception: to_exception_object(result, message_element) ) end @@ -128,13 +128,6 @@ def to_test_step_finished_envelope(test_step, step_result) ) end - def to_error_message(message_element) - <<~ERROR_MESSAGE - #{message_element.message} (#{message_element.class}) - #{message_element.backtrace} - ERROR_MESSAGE - end - def to_exception_object(result, message_element) return unless result.failed? From 6b60a8413fea25be55e1f3bccfa9fc60cc3c38cf Mon Sep 17 00:00:00 2001 From: Luke Hill Date: Mon, 2 Nov 2026 10:40:25 +0000 Subject: [PATCH 5/5] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79b8a65f..29d6e38c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo ## [Unreleased] ### Changed -- Add additional parameters (`message` and `exception`), to the message generated by pending or skipped test steps +- Add additional parameters (`message` and `exception`), conditionally to the message generated by a pending or skipped +test step (If it is defined in the invocating step definition) ## [20.0.0] - 2026-10-09 ### Changed