fix(webServer): route output through reporters (#12198)
This commit is contained in:
parent
7696fec1fa
commit
34eec7eae7
|
|
@ -426,7 +426,7 @@ export class Runner {
|
|||
await this._runAndReportError(async () => {
|
||||
for (const internalGlobalSetup of this._internalGlobalSetups)
|
||||
internalGlobalTeardowns.push(await internalGlobalSetup());
|
||||
webServer = config.webServer ? await WebServer.create(config.webServer) : undefined;
|
||||
webServer = config.webServer ? await WebServer.create(config.webServer, this._reporter) : undefined;
|
||||
if (config.globalSetup)
|
||||
globalSetupResult = await (await this._loader.loadGlobalHook(config.globalSetup, 'globalSetup'))(this._loader.fullConfig());
|
||||
}, result);
|
||||
|
|
|
|||
|
|
@ -17,36 +17,29 @@
|
|||
import http from 'http';
|
||||
import https from 'https';
|
||||
import net from 'net';
|
||||
import os from 'os';
|
||||
import stream from 'stream';
|
||||
import debug from 'debug';
|
||||
import { raceAgainstTimeout } from 'playwright-core/lib/utils/async';
|
||||
import { WebServerConfig } from './types';
|
||||
import { launchProcess } from 'playwright-core/lib/utils/processLauncher';
|
||||
import { Reporter } from '../types/testReporter';
|
||||
|
||||
const DEFAULT_ENVIRONMENT_VARIABLES = {
|
||||
'BROWSER': 'none', // Disable that create-react-app will open the page in the browser
|
||||
};
|
||||
|
||||
const newProcessLogPrefixer = () => new stream.Transform({
|
||||
transform(this: stream.Transform, chunk: Buffer, encoding: string, callback: stream.TransformCallback) {
|
||||
this.push(chunk.toString().split(os.EOL).map((line: string): string => line ? `[WebServer] ${line}` : line).join(os.EOL));
|
||||
callback();
|
||||
},
|
||||
});
|
||||
|
||||
const debugWebServer = debug('pw:webserver');
|
||||
|
||||
export class WebServer {
|
||||
private _isAvailable: () => Promise<boolean>;
|
||||
private _killProcess?: () => Promise<void>;
|
||||
private _processExitedPromise!: Promise<any>;
|
||||
constructor(private readonly config: WebServerConfig) {
|
||||
|
||||
constructor(private readonly config: WebServerConfig, private readonly reporter: Reporter) {
|
||||
this._isAvailable = getIsAvailableFunction(config);
|
||||
}
|
||||
|
||||
public static async create(config: WebServerConfig): Promise<WebServer> {
|
||||
const webServer = new WebServer(config);
|
||||
public static async create(config: WebServerConfig, reporter: Reporter): Promise<WebServer> {
|
||||
const webServer = new WebServer(config, reporter);
|
||||
try {
|
||||
await webServer._startProcess();
|
||||
await webServer._waitForProcess();
|
||||
|
|
@ -85,8 +78,11 @@ export class WebServer {
|
|||
});
|
||||
this._killProcess = kill;
|
||||
|
||||
launchedProcess.stderr!.pipe(newProcessLogPrefixer()).pipe(process.stderr);
|
||||
launchedProcess.stdout!.on('data', (line: Buffer) => debugWebServer(line.toString()));
|
||||
launchedProcess.stderr!.on('data', line => this.reporter.onStdErr?.('[WebServer] ' + line.toString()));
|
||||
launchedProcess.stdout!.on('data', line => {
|
||||
if (debugWebServer.enabled)
|
||||
this.reporter.onStdOut?.('[WebServer] ' + line.toString());
|
||||
});
|
||||
}
|
||||
|
||||
private async _waitForProcess() {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
const { TestServer } = require('../../../utils/testserver/');
|
||||
console.error('error from server');
|
||||
// delay creating the server to test waiting for it
|
||||
setTimeout(() => {
|
||||
TestServer.create(__dirname, process.argv[2] || 3000).then(server => {
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ test('should create a server', async ({ runInlineTest }, { workerIndex }) => {
|
|||
});
|
||||
expect(result.exitCode).toBe(0);
|
||||
expect(result.passed).toBe(1);
|
||||
expect(result.output).not.toContain('[WebServer] listening');
|
||||
expect(result.output).toContain('[WebServer] error from server');
|
||||
expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed');
|
||||
|
||||
const expectedLogMessages = ['globalSetup-status-200', 'globalSetup-teardown-status', 'globalTeardown-status-200'];
|
||||
|
|
@ -102,9 +104,11 @@ test('should create a server with environment variables', async ({ runInlineTest
|
|||
}
|
||||
};
|
||||
`,
|
||||
});
|
||||
}, {}, { DEBUG: 'pw:webserver' });
|
||||
expect(result.exitCode).toBe(0);
|
||||
expect(result.passed).toBe(1);
|
||||
expect(result.output).toContain('[WebServer] listening');
|
||||
expect(result.output).toContain('[WebServer] error from server');
|
||||
expect(result.report.suites[0].specs[0].tests[0].results[0].status).toContain('passed');
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue