mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-01 01:29:31 +08:00
ci: collect test coverage on electron (#2335)
This commit is contained in:
@@ -353,17 +353,35 @@ jobs:
|
|||||||
if: ${{ matrix.spec.test && matrix.spec.os == 'ubuntu-latest' }}
|
if: ${{ matrix.spec.test && matrix.spec.os == 'ubuntu-latest' }}
|
||||||
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test
|
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test
|
||||||
working-directory: apps/electron
|
working-directory: apps/electron
|
||||||
|
env:
|
||||||
|
COVERAGE: true
|
||||||
|
|
||||||
- name: Run desktop tests
|
- name: Run desktop tests
|
||||||
if: ${{ matrix.spec.test && matrix.spec.os != 'ubuntu-latest' }}
|
if: ${{ matrix.spec.test && matrix.spec.os != 'ubuntu-latest' }}
|
||||||
run: yarn test
|
run: yarn test
|
||||||
working-directory: apps/electron
|
working-directory: apps/electron
|
||||||
|
env:
|
||||||
|
COVERAGE: true
|
||||||
|
|
||||||
|
- name: Collect code coverage report
|
||||||
|
if: ${{ matrix.spec.test }}
|
||||||
|
run: yarn exec nyc report -t .nyc_output --report-dir .coverage --reporter=lcov
|
||||||
|
|
||||||
|
- name: Upload e2e test coverage results
|
||||||
|
if: ${{ matrix.spec.test }}
|
||||||
|
uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: ./.coverage/lcov.info
|
||||||
|
flags: e2etest-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
|
||||||
|
name: affine
|
||||||
|
fail_ci_if_error: true
|
||||||
|
|
||||||
- name: Upload test results
|
- name: Upload test results
|
||||||
if: ${{ failure() }}
|
if: ${{ failure() }}
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: test-results-e2e-${{ matrix.shard }}
|
name: test-results-e2e-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
|
||||||
path: ./test-results
|
path: ./test-results
|
||||||
if-no-files-found: ignore
|
if-no-files-found: ignore
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,13 @@
|
|||||||
|
|
||||||
/* eslint-disable no-empty-pattern */
|
/* eslint-disable no-empty-pattern */
|
||||||
import crypto from 'node:crypto';
|
import crypto from 'node:crypto';
|
||||||
import { resolve } from 'node:path';
|
import { join, resolve } from 'node:path';
|
||||||
|
|
||||||
import { test as base } from '@affine-test/kit/playwright';
|
import {
|
||||||
|
enableCoverage,
|
||||||
|
istanbulTempDir,
|
||||||
|
test as base,
|
||||||
|
} from '@affine-test/kit/playwright';
|
||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import type { ElectronApplication, Page } from 'playwright';
|
import type { ElectronApplication, Page } from 'playwright';
|
||||||
import { _electron as electron } from 'playwright';
|
import { _electron as electron } from 'playwright';
|
||||||
@@ -44,7 +48,29 @@ export const test = base.extend<{
|
|||||||
});
|
});
|
||||||
// wat for blocksuite to be loaded
|
// wat for blocksuite to be loaded
|
||||||
await page.waitForSelector('v-line');
|
await page.waitForSelector('v-line');
|
||||||
|
if (enableCoverage) {
|
||||||
|
await fs.promises.mkdir(istanbulTempDir, { recursive: true });
|
||||||
|
await page.exposeFunction(
|
||||||
|
'collectIstanbulCoverage',
|
||||||
|
(coverageJSON?: string) => {
|
||||||
|
if (coverageJSON)
|
||||||
|
fs.writeFileSync(
|
||||||
|
join(
|
||||||
|
istanbulTempDir,
|
||||||
|
`playwright_coverage_${generateUUID()}.json`
|
||||||
|
),
|
||||||
|
coverageJSON
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
await use(page);
|
await use(page);
|
||||||
|
if (enableCoverage) {
|
||||||
|
await page.evaluate(() =>
|
||||||
|
// @ts-expect-error
|
||||||
|
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))
|
||||||
|
);
|
||||||
|
}
|
||||||
await page.close();
|
await page.close();
|
||||||
if (logFilePath) {
|
if (logFilePath) {
|
||||||
const logs = await fs.readFile(logFilePath, 'utf-8');
|
const logs = await fs.readFile(logFilePath, 'utf-8');
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { execSync } from 'node:child_process';
|
import { execSync } from 'node:child_process';
|
||||||
|
import { join } from 'node:path';
|
||||||
|
|
||||||
export default async function () {
|
export default async function () {
|
||||||
execSync('yarn ts-node-esm scripts/', {
|
execSync('yarn ts-node-esm scripts/', {
|
||||||
cwd: path.join(__dirname, '..'),
|
cwd: join(__dirname, '..'),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,15 +13,15 @@ ok(require(resolve(rootDir, 'package.json')).name.toLowerCase() === 'affine');
|
|||||||
|
|
||||||
export const testResultDir = resolve(rootDir, 'test-results');
|
export const testResultDir = resolve(rootDir, 'test-results');
|
||||||
|
|
||||||
const istanbulTempDir = process.env.ISTANBUL_TEMP_DIR
|
export const istanbulTempDir = process.env.ISTANBUL_TEMP_DIR
|
||||||
? path.resolve(process.env.ISTANBUL_TEMP_DIR)
|
? path.resolve(process.env.ISTANBUL_TEMP_DIR)
|
||||||
: path.join(process.cwd(), '.nyc_output');
|
: path.join(rootDir, '.nyc_output');
|
||||||
|
|
||||||
function generateUUID() {
|
function generateUUID() {
|
||||||
return crypto.randomUUID();
|
return crypto.randomUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
const enableCoverage = !!process.env.CI || !!process.env.COVERAGE;
|
export const enableCoverage = !!process.env.CI || !!process.env.COVERAGE;
|
||||||
|
|
||||||
export const test = baseTest.extend({
|
export const test = baseTest.extend({
|
||||||
context: async ({ context }, use) => {
|
context: async ({ context }, use) => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { test } from '@playwright/test';
|
import { test } from '@affine-test/kit/playwright';
|
||||||
|
|
||||||
import { openHomePage } from '../libs/load-page';
|
import { openHomePage } from '../libs/load-page';
|
||||||
import { waitMarkdownImported } from '../libs/page-logic';
|
import { waitMarkdownImported } from '../libs/page-logic';
|
||||||
|
|||||||
Reference in New Issue
Block a user