From 349a1e00a9975048e2974012cdd51eba80df2f67 Mon Sep 17 00:00:00 2001 From: Thanabodee Charoenpiriyakij Date: Wed, 2 Jan 2019 15:21:18 +0700 Subject: [PATCH] JUnit: create directory before creating output file Close #554 --- reporters/junit_reporter.go | 4 ++++ reporters/junit_reporter_test.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/reporters/junit_reporter.go b/reporters/junit_reporter.go index 2c9f3c792..975659270 100644 --- a/reporters/junit_reporter.go +++ b/reporters/junit_reporter.go @@ -13,6 +13,7 @@ import ( "fmt" "math" "os" + "path/filepath" "strings" "github.com/onsi/ginkgo/config" @@ -124,6 +125,9 @@ func (reporter *JUnitReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) { reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000 reporter.suite.Failures = summary.NumberOfFailedSpecs reporter.suite.Errors = 0 + if err := os.MkdirAll(filepath.Dir(reporter.filename), 0755); err != nil { + fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error()) + } file, err := os.Create(reporter.filename) if err != nil { fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error()) diff --git a/reporters/junit_reporter_test.go b/reporters/junit_reporter_test.go index 9b75dc006..fae127e08 100644 --- a/reporters/junit_reporter_test.go +++ b/reporters/junit_reporter_test.go @@ -4,6 +4,7 @@ import ( "encoding/xml" "io/ioutil" "os" + "path/filepath" "time" . "github.com/onsi/ginkgo" @@ -255,4 +256,21 @@ var _ = Describe("JUnit Reporter", func() { }) }) } + + When("output directory doesn't exist", func() { + It("should create before open file", func() { + dir, err := ioutil.TempDir("", "not-exist") + Expect(err).ShouldNot(HaveOccurred()) + defer os.RemoveAll(dir) + + output := filepath.Join(dir, "not", "exist", "report.xml") + reporter := reporters.NewJUnitReporter(output) + reporter.SpecSuiteDidEnd(&types.SuiteSummary{ + NumberOfSpecsThatWillBeRun: 1, + NumberOfFailedSpecs: 0, + RunTime: testSuiteTime, + }) + Ω(output).Should(BeAnExistingFile()) + }) + }) })