ci: collect test coverage on electron (#2335)

This commit is contained in:
Himself65
2023-05-12 09:51:13 +08:00
committed by GitHub
parent 8d117123d7
commit 0fbed5d9d6
5 changed files with 53 additions and 8 deletions

View File

@@ -353,17 +353,35 @@ jobs:
if: ${{ matrix.spec.test && matrix.spec.os == 'ubuntu-latest' }}
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test
working-directory: apps/electron
env:
COVERAGE: true
- name: Run desktop tests
if: ${{ matrix.spec.test && matrix.spec.os != 'ubuntu-latest' }}
run: yarn test
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
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: test-results-e2e-${{ matrix.shard }}
name: test-results-e2e-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
path: ./test-results
if-no-files-found: ignore

View File

@@ -3,9 +3,13 @@
/* eslint-disable no-empty-pattern */
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 type { ElectronApplication, Page } from 'playwright';
import { _electron as electron } from 'playwright';
@@ -44,7 +48,29 @@ export const test = base.extend<{
});
// wat for blocksuite to be loaded
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);
if (enableCoverage) {
await page.evaluate(() =>
// @ts-expect-error
window.collectIstanbulCoverage(JSON.stringify(window.__coverage__))
);
}
await page.close();
if (logFilePath) {
const logs = await fs.readFile(logFilePath, 'utf-8');

View File

@@ -1,7 +1,8 @@
import { execSync } from 'node:child_process';
import { join } from 'node:path';
export default async function () {
execSync('yarn ts-node-esm scripts/', {
cwd: path.join(__dirname, '..'),
cwd: join(__dirname, '..'),
});
}

View File

@@ -13,15 +13,15 @@ ok(require(resolve(rootDir, 'package.json')).name.toLowerCase() === 'affine');
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.join(process.cwd(), '.nyc_output');
: path.join(rootDir, '.nyc_output');
function generateUUID() {
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({
context: async ({ context }, use) => {

View File

@@ -1,4 +1,4 @@
import { test } from '@playwright/test';
import { test } from '@affine-test/kit/playwright';
import { openHomePage } from '../libs/load-page';
import { waitMarkdownImported } from '../libs/page-logic';