diff --git a/trainer/lib/trainer/xcresult.rb b/trainer/lib/trainer/xcresult.rb index 8c33d4bc6df..5e687a68295 100644 --- a/trainer/lib/trainer/xcresult.rb +++ b/trainer/lib/trainer/xcresult.rb @@ -391,7 +391,7 @@ def initialize(data) def failure_message new_message = self.message - if self.document_location_in_creating_workspace + if self.document_location_in_creating_workspace&.url file_path = self.document_location_in_creating_workspace.url.gsub("file://", "") new_message += " (#{file_path})" end diff --git a/trainer/spec/test_parser_spec.rb b/trainer/spec/test_parser_spec.rb index 373390b612a..24ecf1388a6 100644 --- a/trainer/spec/test_parser_spec.rb +++ b/trainer/spec/test_parser_spec.rb @@ -198,6 +198,15 @@ } ]) end + + it "still produces a test failure message when file url is missing", requires_xcode: true do + allow_any_instance_of(Trainer::XCResult::TestFailureIssueSummary).to receive(:document_location_in_creating_workspace).and_return(nil) + tp = Trainer::TestParser.new("./trainer/spec/fixtures/Test.test_result.xcresult") + test_failures = tp.data.last[:tests].select { |t| t[:failures] } + failure_messages = test_failures.map { |tf| tf[:failures].first[:failure_message] } + expect(failure_messages).to eq(["XCTAssertTrue failed", "XCTAssertTrue failed"]) + RSpec::Mocks.space.proxy_for(Trainer::XCResult::TestFailureIssueSummary).reset + end end end end