mirror of
https://github.com/fluencelabs/fluence-js.git
synced 2025-05-09 00:02:14 +00:00
- Move marine-related part into FJS repo (fixes DXJ-184) - Move towards component-oriented architecture (fixes DXJ-183) - Different JS Client distros for node.js and web (fixes DXJ-185) - Update libp2p to 0.42.2 (fixes DXJ-26) - Add JS Client API (fixes DXJ-196, fixes DXJ-177, fixes DXJ-60) - Add Smoke test for JS Client web (fixes DXJ-253) --------- Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>
116 lines
3.1 KiB
TypeScript
116 lines
3.1 KiB
TypeScript
import Webpack from 'webpack';
|
|
import WebpackDevServer from 'webpack-dev-server';
|
|
import webpackConfig from '../webpack.config.js';
|
|
import process from 'process';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
|
|
// change directory to the location to the test-project.
|
|
// run all the subsequent Webpack scripts in that directory
|
|
process.chdir(path.join(__dirname, '..'));
|
|
|
|
let server;
|
|
const port = 8080;
|
|
|
|
jest.setTimeout(10000);
|
|
|
|
const startServer = async (modifyConfig?) => {
|
|
const loadInBrowserToDebug = false;
|
|
// const loadInBrowserToDebug = true; // use this line to debug
|
|
|
|
modifyConfig = modifyConfig || ((_) => {});
|
|
|
|
const config: any = webpackConfig();
|
|
modifyConfig(config);
|
|
config.devServer.open = loadInBrowserToDebug;
|
|
server = await makeServer(config);
|
|
};
|
|
|
|
// https://stackoverflow.com/questions/42940550/wait-until-webpack-dev-server-is-ready
|
|
function makeServer(config) {
|
|
return new Promise((resolve, reject) => {
|
|
const compiler = Webpack(config);
|
|
|
|
let compiled = false;
|
|
let listening = false;
|
|
|
|
compiler.hooks.done.tap('tap_name', () => {
|
|
// console.log('compiled');
|
|
|
|
if (listening) resolve(server);
|
|
else compiled = true;
|
|
});
|
|
|
|
const server = new WebpackDevServer(compiler, config.devServer);
|
|
|
|
server.listen(port, '0.0.0.0', (err) => {
|
|
if (err) return reject(err);
|
|
|
|
// console.log('listening');
|
|
|
|
if (compiled) {
|
|
resolve(server);
|
|
} else {
|
|
listening = true;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
const stopServer = async () => {
|
|
console.log('test: stopping server');
|
|
await server.stop();
|
|
};
|
|
|
|
const publicDir = 'public';
|
|
|
|
const copyFile = async (packageName: string, fileName: string) => {
|
|
const modulePath = require.resolve(packageName);
|
|
const source = path.join(path.dirname(modulePath), fileName);
|
|
const dest = path.join(publicDir, fileName);
|
|
|
|
return fs.promises.copyFile(source, dest);
|
|
};
|
|
|
|
const copyPublicDeps = async () => {
|
|
await fs.promises.mkdir(publicDir, { recursive: true });
|
|
return Promise.all([
|
|
copyFile('@fluencelabs/marine-js', 'marine-js.wasm'),
|
|
copyFile('@fluencelabs/avm', 'avm.wasm'),
|
|
]);
|
|
};
|
|
|
|
const cleanPublicDeps = () => {
|
|
return fs.promises.rm(publicDir, { recursive: true, force: true });
|
|
};
|
|
|
|
describe('Browser integration tests', () => {
|
|
beforeEach(async () => {
|
|
await copyPublicDeps();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await stopServer();
|
|
await cleanPublicDeps();
|
|
});
|
|
|
|
it('Some test', async () => {
|
|
console.log('test: starting server...');
|
|
await startServer();
|
|
console.log('test: navigating to page...');
|
|
await page.goto('http://localhost:8080/');
|
|
|
|
console.log('test: running script in browser...');
|
|
const res = await page.evaluate(() => {
|
|
// @ts-ignore
|
|
return window.MAIN();
|
|
});
|
|
|
|
console.log('test: checking expectations...');
|
|
await expect(res).toMatchObject({
|
|
retCode: 0,
|
|
errorMessage: '',
|
|
});
|
|
});
|
|
});
|