You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

82 lines
1.9 KiB

import path from 'path';
import webpack from 'webpack';
import Promise from 'bluebird';
import MemoryFs from 'memory-fs';
const fs = new MemoryFs();
const unitTestFixtures = path.resolve(__dirname, 'fixtures');
/**
*
*
* @param {string} fixtureName
* @param {string} [withQueryString='']
* @returns {string} Absolute path of a file with query that is to be run by a loader.
*/
function getFixtureResource(fixtureName, withQueryString = '') {
return `${getFixture(fixtureName)}?${withQueryString}`;
}
/**
*
*
* @param {string} fixtureName
* @returns {string} Absolute path of a file with query that is to be run by a loader.
*/
function getFixture(fixtureName) {
return path.resolve(unitTestFixtures, `${fixtureName}.js`);
}
/**
*
*
* @param {Object} withOptions - Loader Options
* @returns {{loader: string, options: Object}}
*/
function getLoader(withOptions) {
return [{ loader: path.resolve(__dirname, '../dist/index.js'), options: withOptions }];
}
/**
*
*
* @param {string} exampleName
* @returns {Object|Array} - Returns an object or array of objects representing the webpack configuration options
*/
function getExampleConfig(exampleName) {
return require(`../examples/${exampleName}/webpack.config.js`);
}
/**
*
*
* @param {string} exampleName - name of example inside of examples folder
* @returns
*/
async function runWebpackExampleInMemory(exampleName) {
const webpackConfig = getExampleConfig(exampleName);
const compiler = webpack(webpackConfig);
compiler.outputFileSystem = fs;
const run = Promise.promisify(compiler.run, { context: compiler });
const stats = await run();
const { compilation } = stats;
const { errors, warnings, assets, entrypoints, chunks, modules } = compilation;
const statsJson = stats.toJson();
return {
assets,
entrypoints,
errors,
warnings,
stats,
chunks,
modules,
statsJson,
};
}
export { getExampleConfig, runWebpackExampleInMemory, fs, getFixtureResource, getLoader, getFixture };