Skip to content

Commit

Permalink
cucumber: better support for pending and undefined scenario: report t…
Browse files Browse the repository at this point in the history
…hem as skipped, not passed
  • Loading branch information
anmarchenko committed Jan 23, 2024
1 parent d1034f0 commit bba2c38
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 5 deletions.
12 changes: 8 additions & 4 deletions lib/datadog/ci/contrib/cucumber/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,16 @@ def test_suite_name(test_case)
end

def finish_test(span, result)
if result.skipped?
span.skipped!
elsif result.ok?
span.passed!
if result.skipped? || result.pending? || result.undefined?
span.skipped!(reason: result.message)
elsif result.failed?
span.failed!(exception: result.exception)
elsif result.ok?
span.passed!
else
Datadog.logger.warn do
"Unknown test result #{result.class.name} for test #{span.name}"
end
end
span.finish
end
Expand Down
16 changes: 15 additions & 1 deletion spec/datadog/ci/contrib/cucumber/features/passing.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,18 @@ Feature: Datadog integration
Scenario: cucumber scenario
Given datadog
And datadog
Then datadog
Then datadog

Scenario: undefined scenario
Given datadog
And undefined
Then undefined

Scenario: pending scenario
Given datadog
Then pending

Scenario: skipped scenario
Given datadog
And skip
Then datadog
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@
expect(1 + 1).to eq(3)
end

Then "pending" do
pending("implementation")
end

Then "skip" do
skip_this_scenario
end

Then(/I add (-?\d+) and (-?\d+)/) do |n1, n2|
@res = n1.to_i + n2.to_i
end
Expand Down
35 changes: 35 additions & 0 deletions spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@
let(:feature_file_to_run) { "passing.feature" }

it "creates spans for each scenario and step" do
expect(test_spans).to have(4).items

scenario_span = spans.find { |s| s.resource == "cucumber scenario" }

expect(scenario_span.type).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST)
Expand Down Expand Up @@ -108,6 +110,39 @@
end
end

it "marks undefined cucumber scenario as skipped" do
undefined_scenario_span = spans.find { |s| s.resource == "undefined scenario" }
expect(undefined_scenario_span).not_to be_nil
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(
Datadog::CI::Ext::Test::Status::SKIP
)
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SKIP_REASON)).to eq(
'Undefined step: "undefined"'
)
end

it "marks pending cucumber scenario as skipped" do
undefined_scenario_span = spans.find { |s| s.resource == "pending scenario" }
expect(undefined_scenario_span).not_to be_nil
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(
Datadog::CI::Ext::Test::Status::SKIP
)
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SKIP_REASON)).to eq(
"implementation"
)
end

it "marks skipped cucumber scenario as skipped" do
undefined_scenario_span = spans.find { |s| s.resource == "skipped scenario" }
expect(undefined_scenario_span).not_to be_nil
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(
Datadog::CI::Ext::Test::Status::SKIP
)
expect(undefined_scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SKIP_REASON)).to eq(
"Scenario skipped"
)
end

it "creates test session span" do
expect(test_session_span).not_to be_nil
expect(test_session_span.service).to eq("jalapenos")
Expand Down
3 changes: 3 additions & 0 deletions vendor/rbs/cucumber/0/cucumber.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class Cucumber::Core::Test::Result
def failed?: () -> bool
def ok?: () -> bool
def skipped?: () -> bool
def pending?: () -> bool
def undefined?: () -> bool
def message: () -> String
def exception: () -> untyped
end

Expand Down

0 comments on commit bba2c38

Please sign in to comment.