Compare commits
1 commit
main
...
mklocke/e2
Author | SHA1 | Date | |
---|---|---|---|
d2c2647ae8 |
|
@ -4,7 +4,7 @@ import type {Config} from '@jest/types';
|
||||||
const config: Config.InitialOptions = {
|
const config: Config.InitialOptions = {
|
||||||
preset: 'ts-jest',
|
preset: 'ts-jest',
|
||||||
testMatch: ['**/playground/**/*.(spec|test).[jt]s?(x)'],
|
testMatch: ['**/playground/**/*.(spec|test).[jt]s?(x)'],
|
||||||
testTimeout: process.env.CI ? 30000 : 10000,
|
testTimeout: process.env.CI ? 30000 : 1000000,
|
||||||
watchPathIgnorePatterns: ['<rootDir>/temp'],
|
watchPathIgnorePatterns: ['<rootDir>/temp'],
|
||||||
globalSetup: './scripts/jest-e2e-setup.js',
|
globalSetup: './scripts/jest-e2e-setup.js',
|
||||||
globalTeardown: './scripts/jest-e2e-teardown.js',
|
globalTeardown: './scripts/jest-e2e-teardown.js',
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// the default e2e test serve behavior
|
// the default e2e test serve behavior
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const {spawn} = require('child_process');
|
||||||
|
|
||||||
const port = (exports.port = 9528);
|
const port = (exports.port = 9528);
|
||||||
|
|
||||||
|
@ -11,51 +12,92 @@ const port = (exports.port = 9528);
|
||||||
* @param {boolean} isProd
|
* @param {boolean} isProd
|
||||||
*/
|
*/
|
||||||
exports.serve = async function serve(root, isProd) {
|
exports.serve = async function serve(root, isProd) {
|
||||||
// we build first, regardless of whether it's prod/build mode
|
// we build first, regardless of whether it's prod/build mode
|
||||||
// because Vite doesn't support the concept of a "webworker server"
|
// because Vite doesn't support the concept of a "webworker server"
|
||||||
const {build} = require('vite');
|
const {build} = require('vite');
|
||||||
|
|
||||||
// client build
|
// client build
|
||||||
await build({
|
await build({
|
||||||
root,
|
root,
|
||||||
logLevel: 'silent',
|
logLevel: 'silent',
|
||||||
build: {
|
build: {
|
||||||
outDir: 'dist/client',
|
outDir: 'dist/client',
|
||||||
manifest: true,
|
manifest: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
process.env.WORKER = 'true';
|
process.env.WORKER = 'true';
|
||||||
|
|
||||||
// worker build
|
// worker build
|
||||||
await build({
|
await build({
|
||||||
root,
|
root,
|
||||||
logLevel: 'silent',
|
logLevel: 'silent',
|
||||||
build: {
|
build: {
|
||||||
ssr: 'worker.js',
|
ssr: 'worker.js',
|
||||||
outDir: 'dist/worker',
|
outDir: 'dist/worker',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
delete process.env.WORKER;
|
delete process.env.WORKER;
|
||||||
|
|
||||||
const {createServer} = require(path.resolve(root, 'start-worker.js'));
|
let oxygenRunPath = process.env.OXYGEN_RUN_PATH
|
||||||
const {app} = await createServer(root, isProd);
|
oxygenRunPath = '/Users/mklocke/src/github.com/Shopify/oxygen-sws/bin/oxygen-run-darwin-amd64'
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
if (oxygenRunPath) {
|
||||||
try {
|
console.info("Using oxygen run binary to perform e2e tests.");
|
||||||
const server = app.listen(port, () => {
|
|
||||||
resolve({
|
const assetPath = path.resolve(root, 'dist/client/assets');
|
||||||
// for test teardown
|
const workerPath = path.resolve(root, 'dist/worker/worker.js');
|
||||||
async close() {
|
try {
|
||||||
await new Promise((resolve) => {
|
const child = spawn(`${oxygenRunPath}`, ['--address', `localhost:${port}`, '-a', `${assetPath}`, '-w', `${workerPath}`])
|
||||||
server.close(resolve);
|
await child.unref();
|
||||||
|
|
||||||
|
child.on('error', (err) => {
|
||||||
|
console.error('Failed to start subprocess.', err);
|
||||||
});
|
});
|
||||||
},
|
|
||||||
|
await new Promise(resolve => {
|
||||||
|
child.on('message', (message) => {
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
child.stdout.on('data', (data) => {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Oxygen Started")
|
||||||
|
|
||||||
|
return {
|
||||||
|
async close() {
|
||||||
|
console.log('killed')
|
||||||
|
child.kill();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.info("Using miniflare to perform e2e tests.");
|
||||||
|
|
||||||
|
const {createServer} = require(path.resolve(root, 'start-worker.js'));
|
||||||
|
const {app} = await createServer(root, isProd);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
try {
|
||||||
|
const server = app.listen(port, () => {
|
||||||
|
resolve({
|
||||||
|
// for test teardown
|
||||||
|
async close() {
|
||||||
|
await new Promise((resolve) => {
|
||||||
|
server.close(resolve);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
reject(e);
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@ import {port} from './serve';
|
||||||
const url = `http://localhost:${port}`;
|
const url = `http://localhost:${port}`;
|
||||||
|
|
||||||
it('shows the homepage, navigates to about, and increases the count', async () => {
|
it('shows the homepage, navigates to about, and increases the count', async () => {
|
||||||
await page.goto(url + '/');
|
await page.goto(url + '/', { waitUntil: 'networkidle' });
|
||||||
|
|
||||||
expect(await page.textContent('body')).toContain('Home');
|
expect(await page.textContent('body')).toContain('Home');
|
||||||
await page.click('.btn');
|
await page.click('.btn');
|
||||||
|
|
Loading…
Reference in a new issue