diff --git a/CHANGELOG.md b/CHANGELOG.md index 48af8619..402b13d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo ### Added - Moved the version definition to `lib/cucumber/core/version.rb` and updated the gemspec to use `Cucumber::Core::VERSION` +### Changed +- 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) ([#348](https://github.com/cucumber/cucumber-ruby-core/pull/348)) + ## [20.0.0] - 2026-10-09 ### Changed - **BREAKING CHANGE:** `Cucumber::Core::Test::Runner` now takes a retry policy instead of a maximum number of attempts, and diff --git a/lib/cucumber/core/test/result/pending.rb b/lib/cucumber/core/test/result/pending.rb index 03b156d0..664d6258 100644 --- a/lib/cucumber/core/test/result/pending.rb +++ b/lib/cucumber/core/test/result/pending.rb @@ -29,10 +29,19 @@ def to_sym end def to_message - Cucumber::Messages::TestStepResult.new( - status: Cucumber::Messages::TestStepResultStatus::PENDING, - duration: duration.to_message_duration - ) + 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 8d33d63c..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) @@ -39,6 +39,16 @@ def with_filtered_backtrace(filter) filter.new(dup).exception end + + private + + def exception_sub_message + 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..356ff64e 100644 --- a/lib/cucumber/core/test/result/skipped.rb +++ b/lib/cucumber/core/test/result/skipped.rb @@ -29,10 +29,19 @@ def to_sym end def to_message - Cucumber::Messages::TestStepResult.new( - status: Cucumber::Messages::TestStepResultStatus::SKIPPED, - duration: duration.to_message_duration - ) + 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?