hq-test
Version:
Automatically generate test code based on test parameters
135 lines (134 loc) • 4.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs_1 = tslib_1.__importDefault(require("fs"));
const path_1 = tslib_1.__importDefault(require("path"));
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const rootDir = process.cwd();
var EOperator;
(function (EOperator) {
EOperator["TOBE"] = "toBe";
EOperator["TOTHROW"] = "toThrow";
EOperator["NOTTOBE"] = "!toBe";
})(EOperator || (EOperator = {}));
function _templateStrHandle(value) {
if (value === undefined) {
return undefined;
}
let _value = JSON.parse(JSON.stringify(value));
if (Array.isArray(_value)) {
for (let i = 0, len = _value.length; i < len; ++i) {
_value[i] = `'${_templateStrHandle(_value[i])}'`;
}
_value = `[${_value.join(',')}]`;
}
else if (typeof _value === 'string') {
_value = `${_value}`;
}
else if (_value.toString() === '[object Object]') {
let arr = [];
for (let key in _value) {
_value[key] = _templateStrHandle(_value[key]);
const _key = _templateStrHandle(key);
arr.push(`${_key}: ${_value[key]}`);
}
_value = `{${arr.join(',')}}`;
}
return _value;
}
function _getArgs(args) {
let str = '';
if (Array.isArray(args)) {
for (let i = 0, len = args.length; i < len; i++) {
args[i] = _templateStrHandle(args[i]);
}
str = args.join(',');
}
else if (args.toString() === '[object Object]') {
str = _templateStrHandle(args);
}
else if (typeof args === 'string') {
str = `'${args}'`;
}
else {
str = args;
}
return str;
}
function _gener(options) {
const { name, paramSet } = options;
const tests = [];
for (const param of paramSet) {
const { args, result, operator } = param;
let it;
switch (operator) {
case EOperator.TOBE: {
it = `expect(_.${name}(${_getArgs(args)})).${operator}(${result})`;
break;
}
case EOperator.TOTHROW: {
it = `expect(() => _.${name}(${_getArgs(args)})).${operator}(${result})`;
break;
}
case EOperator.NOTTOBE: {
it = `expect(_.${name}(${_getArgs(args)})).not.toBe(${result})`;
break;
}
default: {
it = '';
}
}
tests.push(it);
}
return tests;
}
function _createTest(testParams) {
if (!fs_1.default.existsSync(`${path_1.default.join(rootDir, 'test')}`)) {
fs_1.default.mkdirSync(`${path_1.default.join(rootDir, 'test')}`);
}
const testModelObj = {};
for (const test of testParams) {
const { testModel } = test;
const key = testModel.name;
if (testModelObj[key]) {
testModelObj[key].push(test);
}
else {
testModelObj[key] = [test];
}
}
for (const key in testModelObj) {
let resultsStr;
for (const testItem of testModelObj[key]) {
const { testSuite } = testItem;
resultsStr = `test('${testSuite.name}', function () { \n`;
const tests = _gener(testSuite);
resultsStr += tests.join('\n\n');
resultsStr += `\n});\n`;
}
const { name, path } = testModelObj[key][0].testModel;
resultsStr = ` const _ = require('${path_1.default.join(rootDir, path, key)}.js');
\n` + resultsStr;
fs_1.default.writeFileSync(`${path_1.default.join(rootDir)}/test/${name}.test.js`, resultsStr);
}
console.log(chalk_1.default.green(`File generated`));
}
function importTestParams(path) {
let stats = fs_1.default.statSync(`${rootDir}/${path}`);
if (stats.isDirectory()) {
try {
const buffer = fs_1.default.readFileSync(`${path_1.default.join(rootDir, path, 'params.json')}`);
const testParams = JSON.parse(buffer.toString());
_createTest(testParams);
}
catch (e) {
throw new Error(e);
}
}
else {
throw new Error('该文件夹不存在');
}
}
exports.default = {
importTestParams
};