Skip to content

Commit

Permalink
fix(reporter-junit): remove trailing zeros in duration (#1842)
Browse files Browse the repository at this point in the history
  • Loading branch information
nieyuyao committed Aug 15, 2022
1 parent 1a3cae1 commit fbc9394
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 44 deletions.
5 changes: 3 additions & 2 deletions packages/vitest/src/node/reporters/junit.ts
Expand Up @@ -58,8 +58,9 @@ function escapeXML(value: any): string {
true)
}

function getDuration(task: Task): string | undefined {
return task.result?.duration ? (task.result.duration / 1000).toFixed(10) : undefined
export function getDuration(task: Task): string | undefined {
const duration = task.result?.duration ?? 0
return (duration / 1000).toLocaleString(undefined, { useGrouping: false, maximumFractionDigits: 10 })
}

export class JUnitReporter implements Reporter {
Expand Down
84 changes: 42 additions & 42 deletions test/reporters/tests/__snapshots__/reporters.spec.ts.snap
Expand Up @@ -3,32 +3,32 @@
exports[`JUnit reporter (no outputFile entry) 1`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand All @@ -39,32 +39,32 @@ AssertionError: expected 2.23606797749979 to equal 2
exports[`JUnit reporter 1`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand All @@ -80,32 +80,32 @@ exports[`JUnit reporter with outputFile 1`] = `
exports[`JUnit reporter with outputFile 2`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand All @@ -121,32 +121,32 @@ exports[`JUnit reporter with outputFile in non-existing directory 1`] = `
exports[`JUnit reporter with outputFile in non-existing directory 2`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand All @@ -162,32 +162,32 @@ exports[`JUnit reporter with outputFile object 1`] = `
exports[`JUnit reporter with outputFile object 2`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand All @@ -203,32 +203,32 @@ exports[`JUnit reporter with outputFile object in non-existing directory 1`] = `
exports[`JUnit reporter with outputFile object in non-existing directory 2`] = `
"<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>
<testsuites>
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.1459928420\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.0014422860\\">
<testsuite name=\\"test/core/test/basic.test.ts\\" timestamp=\\"2022-01-19T10:10:01.759Z\\" hostname=\\"hostname\\" tests=\\"9\\" failures=\\"1\\" errors=\\"0\\" skipped=\\"2\\" time=\\"0.145992842\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; inner suite &gt; Math.sqrt()\\" time=\\"0.001442286\\">
<failure message=\\"expected 2.23606797749979 to equal 2\\" type=\\"AssertionError\\">
AssertionError: expected 2.23606797749979 to equal 2
vitest/test/core/test/basic.test.ts:8:32
</failure>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.0010237110\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; JSON\\" time=\\"0.001023711\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; async with timeout\\" time=\\"0\\">
<skipped/>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; timeout\\" time=\\"0.1005059841\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.0201848750\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success \\" time=\\"0.020184875\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success \\" time=\\"0.0003324542\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.0197386060\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback setup success done(false)\\" time=\\"0.019738606\\">
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; callback test success done(false)\\" time=\\"0.0001923509\\">
<system-err>
[33merror[39m
</system-err>
</testcase>
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\">
<testcase classname=\\"test/core/test/basic.test.ts\\" name=\\"suite &gt; todo test\\" time=\\"0\\">
<skipped/>
</testcase>
</testsuite>
Expand Down
35 changes: 35 additions & 0 deletions test/reporters/tests/junit.test.ts
@@ -0,0 +1,35 @@
import type { Suite, Task, TaskResult } from 'vitest'
import { expect, test } from 'vitest'
import { getDuration } from '../../../packages/vitest/src/node/reporters/junit'

test('calc the duration used by junit', () => {
const result: TaskResult = { state: 'pass', duration: 0 }
const suite: Suite = {
id: '1',
type: 'suite',
name: 'suite',
mode: 'run',
tasks: [],
}
const task: Task = {
id: '1',
type: 'test',
name: 'timeout',
mode: 'run',
result,
context: null as any,
suite,
}
expect(getDuration(task)).toBe('0')
result.duration = 0.12
expect(getDuration(task)).toBe('0.00012')
result.duration = 12
expect(getDuration(task)).toBe('0.012')
result.duration = 12.01
expect(getDuration(task)).toBe('0.01201')
result.duration = 12000
expect(getDuration(task)).toBe('12')
result.duration = 12001
expect(getDuration(task)).toBe('12.001')
})

0 comments on commit fbc9394

Please sign in to comment.