diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml index 8d28c8a..00cd7c7 100644 --- a/.github/workflows/run-tests.yaml +++ b/.github/workflows/run-tests.yaml @@ -54,9 +54,18 @@ jobs: name: test-results path: '**/build/test-results/test*/TESTS-TestSuites.xml' - - name: Send test coverage to Coveralls.io + - name: Send Java backend test coverage to Coveralls.io uses: coverallsapp/github-action@v2 if: always() with: # The .xml file only contains paths relative to this one. base-path: 'strcalc/src/main/java' + file: 'strcalc/build/reports/jacoco/jacocoXmlTestReport/jacocoXmlTestReport.xml' + + - name: Send JavaScript frontend test coverage to Coveralls.io + uses: coverallsapp/github-action@v2 + if: always() + with: + # The lcov file only contains paths relative to this one. + base-path: 'strcalc/src/main/frontend' + file: 'strcalc/build/reports/frontend/coverage/lcov.info' diff --git a/strcalc/build.gradle.kts b/strcalc/build.gradle.kts index 3267c00..cbdce0b 100644 --- a/strcalc/build.gradle.kts +++ b/strcalc/build.gradle.kts @@ -73,6 +73,7 @@ val smallTests = tasks.named("test") { } val testClasses = tasks.named("testClasses") val pnpmBuild = tasks.named("pnpm_build") +val pnpmTestCi = tasks.named("pnpm_test-ci") val war = tasks.named("war") tasks.war { @@ -106,7 +107,7 @@ val mediumCoverageTests = tasks.register("test-medium-coverage") { setLargerTestOptions(this) dependsOn(pnpmBuild) useJUnitPlatform { includeTags("medium & coverage") } - shouldRunAfter(smallTests) + shouldRunAfter(smallTests, pnpmTestCi) } val mediumTests = tasks.register("test-medium") { @@ -114,7 +115,7 @@ val mediumTests = tasks.register("test-medium") { setLargerTestOptions(this) dependsOn(pnpmBuild) useJUnitPlatform { includeTags("medium & !coverage") } - shouldRunAfter(smallTests, mediumCoverageTests) + shouldRunAfter(smallTests, mediumCoverageTests, pnpmTestCi) extensions.configure(JacocoTaskExtension::class) { isEnabled = false } @@ -125,7 +126,7 @@ val largeTests = tasks.register("test-large") { setLargerTestOptions(this) dependsOn(war) useJUnitPlatform { includeTags("large") } - shouldRunAfter(mediumCoverageTests, mediumTests) + shouldRunAfter(mediumCoverageTests, mediumTests, pnpmTestCi) extensions.configure(JacocoTaskExtension::class) { isEnabled = false } @@ -138,7 +139,7 @@ val allTestSizes = arrayOf( val allTests = tasks.register("test-all") { description = "Runs the small, medium, and large test suites in order." group = "verification" - dependsOn(allTestSizes) + dependsOn(pnpmTestCi, allTestSizes) } internal val testResultsDir = java.testResultsDir @@ -154,6 +155,11 @@ val relativeToRootDir = fun(absPath: java.nio.file.Path): java.nio.file.Path { // - https://docs.gradle.org/current/userguide/ant.html val mergeTestReports = fun(resultsDir: File) { val taskName = resultsDir.name + + // The `pnpm_test-ci` output is already merged. Trying to merge it again + // results in an empty file, so skip it. + if (taskName == "test-frontend") return + val relResultsDir = relativeToRootDir(resultsDir.toPath()) val reportTaskName = "merged-report-$taskName" diff --git a/strcalc/src/main/frontend/package.json b/strcalc/src/main/frontend/package.json index b459c16..5fbc86f 100644 --- a/strcalc/src/main/frontend/package.json +++ b/strcalc/src/main/frontend/package.json @@ -9,8 +9,9 @@ "preview": "vite preview", "lint": "eslint --color --max-warnings 0 .", "test": "vitest", - "test:run": "vitest --run", - "test:ui": "vitest --ui", + "test-run": "vitest run", + "test-ui": "vitest --ui --coverage", + "test-ci": "vitest run --coverage --reporter=junit --reporter=default", "coverage": "vitest run --coverage" }, "devDependencies": { diff --git a/strcalc/src/main/frontend/vite.config.js b/strcalc/src/main/frontend/vite.config.js index 5f8a415..e857194 100644 --- a/strcalc/src/main/frontend/vite.config.js +++ b/strcalc/src/main/frontend/vite.config.js @@ -1,6 +1,14 @@ +const BUILD_DIR = '../../../build/' export default { base: '/strcalc', build: { - outDir: '../../../build/webapp' + outDir: BUILD_DIR + 'webapp' + }, + test: { + outputFile: BUILD_DIR + 'test-results/test-frontend/TESTS-TestSuites.xml', + coverage: { + reporter: ['text', 'html', 'lcov'], + reportsDirectory: BUILD_DIR + 'reports/frontend/coverage' + } } }