Skip to content

Commit

Permalink
test: add serve smoketest (#2502)
Browse files Browse the repository at this point in the history
* chore: add serve test

* chore: run serve test
  • Loading branch information
rishabh3112 committed Mar 15, 2021
1 parent a78ccfe commit f010690
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 0 deletions.
1 change: 1 addition & 0 deletions smoketests/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const tests = [
require('./missing-packages/webpack-dev-server.test.js'),
require('./missing-packages/webpack.test.js'),
require('./missing-command-packages/generator.test.js'),
require('./missing-command-packages/serve.test.js'),
];

(async () => {
Expand Down
127 changes: 127 additions & 0 deletions smoketests/missing-command-packages/serve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
'use strict';

const path = require('path');
const execa = require('execa');
const { renameSync } = require('fs');
const stripAnsi = require('strip-ansi');

const ROOT = process.env.GITHUB_WORKSPACE ? process.env.GITHUB_WORKSPACE : path.resolve(__dirname, '../../');
const CLI_ENTRY_PATH = path.resolve(ROOT, './packages/webpack-cli/bin/cli.js');

const getPkgPath = (pkg) => {
return path.resolve(ROOT, `./node_modules/@webpack-cli/${pkg}`);
};

const swapPkgName = (current, next) => {
console.log(` swapping ${current} with ${next}`);
renameSync(getPkgPath(current), getPkgPath(next));
};

const runTest = () => {
// Simulate package missing
swapPkgName('serve', '.serve');

const proc = execa(CLI_ENTRY_PATH, ['serve'], {
cwd: __dirname,
});

proc.stdin.setDefaultEncoding('utf-8');

proc.stdout.on('data', (chunk) => {
console.log(` stdout: ${chunk.toString()}`);
});

return new Promise((resolve) => {
setTimeout(() => {
proc.kill();
}, 30000);

const errorMessage = "For using this command you need to install: '@webpack-cli/serve' package";

let hasErrorMessage = false,
hasPassed = false;

proc.stderr.on('data', (chunk) => {
let data = stripAnsi(chunk.toString());
console.log(` stderr: ${data}`);

if (data.includes(errorMessage)) {
hasErrorMessage = true;
}

if (hasErrorMessage) {
hasPassed = true;
proc.kill();
}
});

proc.on('exit', () => {
swapPkgName('.serve', 'serve');
resolve(hasPassed);
});

proc.on('error', () => {
swapPkgName('.serve', 'serve');
resolve(false);
});
});
};

const runTestWithHelp = () => {
// Simulate package missing
swapPkgName('serve', '.serve');

const proc = execa(CLI_ENTRY_PATH, ['help', 'serve'], {
cwd: __dirname,
});

proc.stdin.setDefaultEncoding('utf-8');

proc.stdout.on('data', (chunk) => {
console.log(` stdout: ${chunk.toString()}`);
});

return new Promise((resolve) => {
setTimeout(() => {
proc.kill();
}, 30000);

const logMessage = "For using 'serve' command you need to install '@webpack-cli/serve' package";
const undefinedLogMessage = "Can't find and load command";

let hasLogMessage = false,
hasUndefinedLogMessage = false,
hasPassed = false;

proc.stderr.on('data', (chunk) => {
let data = stripAnsi(chunk.toString());
console.log(` stderr: ${data}`);

if (data.includes(logMessage)) {
hasLogMessage = true;
}

if (data.includes(undefinedLogMessage)) {
hasUndefinedLogMessage = true;
}

if (hasLogMessage || hasUndefinedLogMessage) {
hasPassed = true;
proc.kill();
}
});

proc.on('exit', () => {
swapPkgName('.serve', 'serve');
resolve(hasPassed);
});

proc.on('error', () => {
swapPkgName('.serve', 'serve');
resolve(false);
});
});
};

module.exports.run = [runTest, runTestWithHelp];
module.exports.name = 'Missing @webpack-cli/serve';

0 comments on commit f010690

Please sign in to comment.