83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { workspaceRoot } from '@nx/devkit';
|
|
import { lstatSync } from 'node:fs';
|
|
import { dirname, join, relative } from 'node:path';
|
|
import { defineConfig } from '@playwright/test';
|
|
|
|
export interface NxPlaywrightOptions {
|
|
/**
|
|
* The directory where the e2e tests are located.
|
|
* @default './src'
|
|
**/
|
|
testDir?: string;
|
|
}
|
|
|
|
/**
|
|
* nx E2E Preset for Playwright
|
|
* @description
|
|
* this preset contains the base configuration
|
|
* for your e2e tests that nx recommends.
|
|
* By default html reporter is configured
|
|
* along with the following browsers:
|
|
* - chromium
|
|
* - firefox
|
|
* - webkit
|
|
* These are generated by default.
|
|
*
|
|
* you can easily extend this within your playwright config via spreading the preset
|
|
* @example
|
|
* export default defineConfig({
|
|
* ...nxE2EPreset(__filename, options)
|
|
* // add your own config here
|
|
* })
|
|
*
|
|
* @param pathToConfig will be used to construct the output paths for reporters and test results
|
|
* @param options optional configuration options
|
|
*/
|
|
export function nxE2EPreset(
|
|
pathToConfig: string,
|
|
options?: NxPlaywrightOptions
|
|
) {
|
|
const normalizedPath = lstatSync(pathToConfig).isDirectory()
|
|
? pathToConfig
|
|
: dirname(pathToConfig);
|
|
const projectPath = relative(workspaceRoot, normalizedPath);
|
|
const offset = relative(normalizedPath, workspaceRoot);
|
|
|
|
const testResultOuputDir = join(
|
|
offset,
|
|
'dist',
|
|
'.playwright',
|
|
projectPath,
|
|
'test-output'
|
|
);
|
|
const reporterOutputDir = join(
|
|
offset,
|
|
'dist',
|
|
'.playwright',
|
|
projectPath,
|
|
'playwright-report'
|
|
);
|
|
|
|
return defineConfig({
|
|
testDir: options?.testDir ?? './src',
|
|
outputDir: testResultOuputDir,
|
|
/* Run tests in files in parallel */
|
|
fullyParallel: true,
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
forbidOnly: !!process.env.CI,
|
|
/* Retry on CI only */
|
|
retries: process.env.CI ? 2 : 0,
|
|
/* Opt out of parallel tests on CI. */
|
|
workers: process.env.CI ? 1 : undefined,
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: [
|
|
[
|
|
'html',
|
|
{
|
|
outputFolder: reporterOutputDir,
|
|
},
|
|
],
|
|
],
|
|
});
|
|
}
|