UNPKG

jest-bdd-generator

Version:

Jest code generator empowered with Gherkin and BDD

82 lines (70 loc) 2.92 kB
import { loadConfiguration, loadSupport, runCucumber /*, loadSources */ } from '@cucumber/cucumber/api'; import * as path from 'path'; import * as fs from 'fs'; export async function runTests(options: { pathFeatureInput?: string; pathTestsInput?: string; pathOutput?: string; scenario?: string[]; }): Promise<boolean> { // load configuration from a particular file, and override a specific option const { runConfiguration } = await loadConfiguration(); // load the support code upfront runConfiguration.support.requireModules = [ path.join(__dirname, `./jest-execute/jest-ts-register${path.extname(__filename)}`) ]; if (options.pathTestsInput) { if (fs.lstatSync(options.pathTestsInput).isDirectory()) { const foldername = options.pathTestsInput; runConfiguration.support.requirePaths = fs .readdirSync(options.pathTestsInput) .filter((subPath) => path.extname(subPath) === '.ts') .map((fname) => path.join(foldername, fname)); } else { runConfiguration.support.requirePaths = [options.pathTestsInput]; } runConfiguration.formats.files = { [`${path.basename(options.pathTestsInput)}-report.html`]: 'html' }; } if (options.pathFeatureInput) { runConfiguration.sources.paths = [options.pathFeatureInput]; if (fs.lstatSync(options.pathFeatureInput).isFile()) { const featureBookName = path.basename(options.pathFeatureInput).replace(/\.feature$/, ''); // overwrite report name from testpath runConfiguration.formats.files = { [`${featureBookName}-report.html`]: 'html' }; // filter *.test.ts with featureName runConfiguration.support.requirePaths = runConfiguration.support.requirePaths.filter( (filename) => path.basename(filename).indexOf(featureBookName) !== -1 ); } } if (options.scenario) { runConfiguration.sources.names = options.scenario; const reportNameWithScenario: { [key: string]: 'html'; } = {}; Object.keys(runConfiguration.formats.files).forEach((key) => { reportNameWithScenario[`${path.basename(key)}-${options.scenario}.html`] = 'html'; }); runConfiguration.formats.files = reportNameWithScenario; } if (options.pathOutput) { const pathOutput = options.pathOutput; const filesFormats = runConfiguration.formats.files; runConfiguration.formats.files = {}; Object.keys(filesFormats).forEach((key) => { const k = path.join(pathOutput, key); runConfiguration.formats.files[k] = filesFormats[key]; }); } // const { plan } = await loadSources(runConfiguration.sources); // console.log(plan); return true; const support = await loadSupport(runConfiguration); // console.log(support); return true; // run cucumber, using the support code we loaded already const { success } = await runCucumber({ ...runConfiguration, support }); return success; }