Skip to content

Commit e12cbe8

Browse files
committed
Add code coverage
1 parent 5a9320f commit e12cbe8

File tree

6 files changed

+89
-9
lines changed

6 files changed

+89
-9
lines changed

.github/workflows/e2e.yml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ on:
55
paths:
66
- 'packages/mcp-server/**'
77
- 'packages/mcp-cloudflare/**'
8-
- 'packages/e2e/**'
8+
- 'packages/mcp-cloudflare-e2e/**'
99
push:
1010
branches: [main]
1111
paths:
1212
- 'packages/mcp-server/**'
1313
- 'packages/mcp-cloudflare/**'
14-
- 'packages/e2e/**'
14+
- 'packages/mcp-cloudflare-e2e/**'
15+
16+
permissions:
17+
contents: read
1518

1619
permissions:
1720
contents: read
@@ -54,12 +57,29 @@ jobs:
5457
- name: Build packages
5558
run: pnpm build
5659

57-
- name: Run E2E tests
58-
run: pnpm test:e2e
60+
- name: Run E2E tests with coverage
61+
run: pnpm --filter=@sentry/mcp-cloudflare-e2e test:ci
62+
63+
- name: Upload coverage to Codecov
64+
uses: codecov/codecov-action@v4
65+
env:
66+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
67+
with:
68+
directory: packages/mcp-cloudflare-e2e/coverage/
69+
flags: e2e
70+
name: codecov-e2e
71+
fail_ci_if_error: false
5972

6073
- uses: actions/upload-artifact@v4
6174
if: always()
6275
with:
6376
name: playwright-report
64-
path: packages/e2e/playwright-report/
77+
path: packages/mcp-cloudflare-e2e/playwright-report/
78+
retention-days: 30
79+
80+
- uses: actions/upload-artifact@v4
81+
if: always()
82+
with:
83+
name: e2e-test-results
84+
path: packages/mcp-cloudflare-e2e/test-results.xml
6585
retention-days: 30

packages/mcp-cloudflare-e2e/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
"description": "End-to-end tests for Sentry MCP",
66
"scripts": {
77
"test": "playwright test",
8+
"test:coverage": "mkdir -p coverage && playwright test && nyc report --reporter=lcov --reporter=json --reporter=text",
9+
"test:ci": "mkdir -p coverage && playwright test --reporter=junit",
810
"test:headed": "playwright test --headed",
911
"test:ui": "playwright test --ui",
1012
"test:debug": "playwright test --debug",
@@ -13,6 +15,8 @@
1315
},
1416
"devDependencies": {
1517
"@playwright/test": "^1.43.0",
16-
"typescript": "^5.4.5"
18+
"typescript": "^5.4.5",
19+
"nyc": "^17.1.0",
20+
"@types/node": "^22.10.6"
1721
}
1822
}

packages/mcp-cloudflare-e2e/playwright.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ export default defineConfig({
1414
/* Opt out of parallel tests on CI. */
1515
workers: process.env.CI ? 1 : undefined,
1616
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
17-
reporter: "html",
17+
reporter: process.env.CI
18+
? [["junit", { outputFile: "test-results.xml" }], ["html"]]
19+
: "html",
1820
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
1921
use: {
2022
/* Base URL to use in actions like `await page.goto('/')`. */
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { test as setup } from "@playwright/test";
2+
3+
setup("collect coverage", async ({ page }) => {
4+
// Enable coverage collection
5+
await page.coverage.startJSCoverage({
6+
resetOnNavigation: false,
7+
});
8+
9+
// Enable CSS coverage as well
10+
await page.coverage.startCSSCoverage({
11+
resetOnNavigation: false,
12+
});
13+
});

packages/mcp-cloudflare-e2e/tests/simple.spec.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,40 @@
11
import { test, expect } from "@playwright/test";
2+
import fs from "node:fs";
23

34
test.describe("Simple Application Tests", () => {
5+
const jsCoverage: any[] = [];
6+
const cssCoverage: any[] = [];
7+
8+
test.beforeEach(async ({ page }) => {
9+
// Start coverage collection for each test
10+
await page.coverage.startJSCoverage();
11+
await page.coverage.startCSSCoverage();
12+
});
13+
14+
test.afterEach(async ({ page }) => {
15+
// Collect coverage after each test
16+
const jsResults = await page.coverage.stopJSCoverage();
17+
const cssResults = await page.coverage.stopCSSCoverage();
18+
19+
jsCoverage.push(...jsResults);
20+
cssCoverage.push(...cssResults);
21+
});
22+
23+
test.afterAll(async () => {
24+
// Write coverage data to files
25+
if (jsCoverage.length > 0) {
26+
fs.writeFileSync(
27+
"coverage/js-coverage.json",
28+
JSON.stringify(jsCoverage, null, 2),
29+
);
30+
}
31+
if (cssCoverage.length > 0) {
32+
fs.writeFileSync(
33+
"coverage/css-coverage.json",
34+
JSON.stringify(cssCoverage, null, 2),
35+
);
36+
}
37+
});
438
test("should load without errors", async ({ page }) => {
539
await page.goto("/");
640

packages/mcp-cloudflare/vite.config.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { cloudflare } from "@cloudflare/vite-plugin";
55
import tailwindcss from "@tailwindcss/vite";
66
import path from "node:path";
77

8-
export default defineConfig({
8+
export default defineConfig(({ mode }) => ({
99
plugins: [
1010
react(),
1111
cloudflare(),
@@ -27,4 +27,11 @@ export default defineConfig({
2727
port: 5173,
2828
strictPort: true, // Fail if port is in use
2929
},
30-
});
30+
// Enable instrumentation for coverage in e2e test mode
31+
define:
32+
mode === "e2e-test"
33+
? {
34+
__COVERAGE__: true,
35+
}
36+
: {},
37+
}));

0 commit comments

Comments
 (0)