feat: 添加测试用例
This commit is contained in:
parent
e0a447adc0
commit
aa49a12cb0
|
|
@ -12,7 +12,10 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha",
|
"test": "mocha",
|
||||||
"make:test:domain": "ts-node script/makeTestDomain.ts",
|
"make:test:domain": "ts-node script/makeTestDomain.ts",
|
||||||
"build": "tsc"
|
"build": "tsc",
|
||||||
|
"build:test": "tsc -p tsconfig.test.json",
|
||||||
|
"test:mysql": "node ./test-dist/testMySQLStore.js",
|
||||||
|
"test:postgres": "node ./test-dist/testPostgresStore.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ export interface Schema extends EntityShape {
|
||||||
area: Area;
|
area: Area;
|
||||||
owner: User;
|
owner: User;
|
||||||
dd: Array<ExtraFile>;
|
dd: Array<ExtraFile>;
|
||||||
size: Float<4, 2>;
|
size: Float<8, 4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const locale: LocaleDef<Schema, '', '', {}> = {
|
const locale: LocaleDef<Schema, '', '', {}> = {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,5 @@
|
||||||
import { describe, it } from 'mocha';
|
import { describe, it } from 'mocha';
|
||||||
import { MySqlTranslator } from '../src/MySQL/translator';
|
import { MySqlTranslator } from '../lib/MySQL/translator';
|
||||||
import { EntityDict, storageSchema } from './test-app-domain';
|
import { EntityDict, storageSchema } from './test-app-domain';
|
||||||
|
|
||||||
describe('test MysqlTranslator', function () {
|
describe('test MysqlTranslator', function () {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,108 @@
|
||||||
|
type AsyncFunc = () => Promise<void>;
|
||||||
|
type SyncFunc = () => void;
|
||||||
|
|
||||||
|
const beforeFuncs: AsyncFunc[] = [];
|
||||||
|
const itFuncs: { desc: string; fn: AsyncFunc }[] = [];
|
||||||
|
const afterFuncs: SyncFunc[] = [];
|
||||||
|
|
||||||
|
const stats = {
|
||||||
|
total: 0,
|
||||||
|
passed: 0,
|
||||||
|
failed: 0,
|
||||||
|
errors: [] as {
|
||||||
|
type: 'before' | 'it' | 'after';
|
||||||
|
desc?: string;
|
||||||
|
error: unknown;
|
||||||
|
}[],
|
||||||
|
};
|
||||||
|
|
||||||
|
export const before = (func: AsyncFunc) => {
|
||||||
|
beforeFuncs.push(func);
|
||||||
|
return func;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const it = (desc: string, func: AsyncFunc) => {
|
||||||
|
itFuncs.push({ desc, fn: func });
|
||||||
|
};
|
||||||
|
|
||||||
|
export const after = (func: SyncFunc) => {
|
||||||
|
afterFuncs.push(func);
|
||||||
|
return func;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const describe = async (desc: string, func: () => Promise<void> | void) => {
|
||||||
|
console.log(desc);
|
||||||
|
|
||||||
|
// 注册阶段
|
||||||
|
await func();
|
||||||
|
|
||||||
|
// before
|
||||||
|
for (const f of beforeFuncs) {
|
||||||
|
try {
|
||||||
|
await f();
|
||||||
|
} catch (err) {
|
||||||
|
stats.failed++;
|
||||||
|
stats.errors.push({
|
||||||
|
type: 'before',
|
||||||
|
error: err,
|
||||||
|
});
|
||||||
|
console.error(' ✗ before failed:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// it
|
||||||
|
for (const { desc, fn } of itFuncs) {
|
||||||
|
stats.total++;
|
||||||
|
try {
|
||||||
|
console.log(' ' + desc);
|
||||||
|
await fn();
|
||||||
|
stats.passed++;
|
||||||
|
console.log(' ✓ passed');
|
||||||
|
} catch (err) {
|
||||||
|
stats.failed++;
|
||||||
|
stats.errors.push({
|
||||||
|
type: 'it',
|
||||||
|
desc,
|
||||||
|
error: err,
|
||||||
|
});
|
||||||
|
console.error(' ✗ failed:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// after(无论如何都执行)
|
||||||
|
for (const f of afterFuncs) {
|
||||||
|
try {
|
||||||
|
f();
|
||||||
|
} catch (err) {
|
||||||
|
stats.failed++;
|
||||||
|
stats.errors.push({
|
||||||
|
type: 'after',
|
||||||
|
error: err,
|
||||||
|
});
|
||||||
|
console.error(' ✗ after failed:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 统计输出
|
||||||
|
printSummary();
|
||||||
|
};
|
||||||
|
|
||||||
|
const printSummary = () => {
|
||||||
|
console.log('\n====== Test Summary ======');
|
||||||
|
console.log(`Total: ${stats.total}`);
|
||||||
|
console.log(`Passed: ${stats.passed}`);
|
||||||
|
console.log(`Failed: ${stats.failed}`);
|
||||||
|
|
||||||
|
if (stats.errors.length) {
|
||||||
|
console.log('\nErrors:');
|
||||||
|
for (const e of stats.errors) {
|
||||||
|
console.log(
|
||||||
|
`- [${e.type}]${e.desc ? ' ' + e.desc : ''}`,
|
||||||
|
'\n ',
|
||||||
|
e.error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('==========================');
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "CommonJS",
|
||||||
|
"target": "ESNext",
|
||||||
|
"declaration": true,
|
||||||
|
"allowJs": false,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"strict": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"importHelpers": true,
|
||||||
|
"lib": [
|
||||||
|
"ESNext",
|
||||||
|
"DOM"
|
||||||
|
],
|
||||||
|
"outDir": "test-dist", /* Redirect output structure to the directory. */
|
||||||
|
"rootDir": "test", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
|
"types": [
|
||||||
|
"node",
|
||||||
|
"mocha"
|
||||||
|
],
|
||||||
|
"forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
|
||||||
|
"resolveJsonModule": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"test/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue