UNPKG

hq-test

Version:

Automatically generate test code based on test parameters

135 lines (134 loc) 4.3 kB
"use strict"; 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 };