Skip to content

Instantly share code, notes, and snippets.

@bs1180
Created August 10, 2021 05:23
Show Gist options
  • Save bs1180/3eb4aa5c48e179cc28a5d316dac9aed4 to your computer and use it in GitHub Desktop.
Save bs1180/3eb4aa5c48e179cc28a5d316dac9aed4 to your computer and use it in GitHub Desktop.
Playwright fixture - start server
import { createServer, Server } from 'http';
import { test as base } from '@playwright/test';
import path from 'path';
import serve from 'serve-handler';
type StaticWorkerFixtures = {
port: number;
server: Server;
};
const test = base.extend<{}, StaticWorkerFixtures>({
port: [
async ({}, use, workerInfo) => {
// We need unique port number for each worker that gets started. It will be assigned the port variable.
await use(3000 + workerInfo.workerIndex);
},
{ scope: 'worker' }
],
server: [
async ({ port }, use) => {
const server: Server = await new Promise(resolve => {
const server = createServer((req, res) => {
serve(req, res, { public: path.join(__dirname, '../public') });
});
// We start a simple static file server listening on the port from the previous step
// @ts-ignore
server.listen(port, error => {
if (error) throw error;
resolve(server);
});
});
await use(server);
// We cleanup the server when we are finished
await new Promise(resolve => server.close(resolve));
},
{
scope: 'worker',
auto: true
}
]
});
export default test;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment