Files
2025-11-05 14:46:49 +08:00

84 lines
2.1 KiB
TypeScript

import type { ElectronApplication, Page } from 'playwright';
import { join } from 'node:path';
import * as base from '@playwright/test';
import { _electron as electron } from 'playwright';
import { main } from '../package.json';
import TestUtil from './testUtil.mjs';
let appElectron: ElectronApplication;
let page: Page;
const __cwd = process.cwd();
const __isCiProcess = process.env.CI === 'true';
const __testPath = join(__cwd, 'tests');
const __testResultPath = join(__testPath, 'results');
const __testScreenshotPath = join(__testResultPath, 'screenshots');
export const beforeAll = async () => {
// Open Electron app from build directory
appElectron = await electron.launch({
args: [
main,
...(__isCiProcess ? ['--no-sandbox'] : []),
'--enable-logging',
'--ignore-certificate-errors',
'--ignore-ssl-errors',
'--ignore-blocklist',
'--ignore-gpu-blocklist',
],
locale: 'en-US',
colorScheme: 'light',
env: {
...process.env,
NODE_ENV: 'production',
},
});
page = await appElectron.firstWindow();
await page.waitForEvent('load');
page.on('console', console.log);
page.on('pageerror', console.log);
const evaluateResult = await appElectron.evaluate(
async ({ app, BrowserWindow }) => {
const currentWindow = BrowserWindow.getFocusedWindow();
// Fix window position for testing
currentWindow.setPosition(50, 50);
currentWindow.setSize(1080, 560);
return {
packaged: app.isPackaged,
dataPath: app.getPath('userData'),
};
},
);
base.expect(evaluateResult.packaged, 'app is not packaged').toBe(false);
};
export const afterAll = async () => {
await appElectron.close();
};
export const test = base.test.extend({
// eslint-disable-next-line no-empty-pattern
page: async ({}, use) => {
await use(page);
},
// @ts-expect-error: `util` is not using types in playwright
util: async ({ page }, use, testInfo) => {
await use(new TestUtil(page, testInfo, __testScreenshotPath));
},
});
export const expect = base.expect;
export default {
test,
expect,
beforeAll,
afterAll,
};