2
0
mirror of https://github.com/YMFE/yapi.git synced 2025-04-12 15:10:23 +08:00

feat: add unit test

This commit is contained in:
suxiaoxin 2017-10-19 15:59:14 +08:00
parent 556e8a1dec
commit ad3d201a4e
3 changed files with 81 additions and 7 deletions

@ -8,11 +8,12 @@
"install-server": " node server/install.js",
"dev-client": "ykit s -p 4000",
"dev": "npm run dev-server & npm run dev-client",
"start": " node server/app.js"
"start": " node server/app.js",
"test": "ava"
},
"repository": {
"type": "git",
"url": "git@gitlab.corp.qunar.com:mfe/yapi.git"
"url": "git@github.com:YMFE/yapi.git"
},
"author": "",
"license": "Apache2.0",
@ -25,6 +26,7 @@
"json-schema-ref-parser": "^4.0.0",
"json5": "^0.5.1",
"jsonwebtoken": "^7.4.1",
"kerberos": "0.0.23",
"koa": "^2.0.0",
"koa-bodyparser": "^3.2.0",
"koa-multer": "^1.0.2",
@ -50,11 +52,8 @@
"url": "^0.11.0"
},
"devDependencies": {
"happypack": "^4.0.0-beta.5",
"prop-types": "^15.5.10",
"rc-queue-anim": "^1.2.0",
"rc-scroll-anim": "^1.0.7",
"assets-webpack-plugin": "^3.5.1",
"ava": "^0.22.0",
"babel": "^6.5.2",
"babel-core": "^6.8.0",
"babel-eslint": "^7.2.3",
@ -81,10 +80,14 @@
"extract-text-webpack-plugin": "2.0.0",
"fast-sass-loader-china": "^1.2.5",
"ghooks": "^2.0.0",
"happypack": "^4.0.0-beta.5",
"less": "^2.7.2",
"less-loader": "^4.0.5",
"node-sass-china": "^4.5.0",
"nodemon": "^1.11.0",
"prop-types": "^15.5.10",
"rc-queue-anim": "^1.2.0",
"rc-scroll-anim": "^1.0.7",
"react": "^15.6.1",
"react-dnd": "^2.5.1",
"react-dnd-html5-backend": "^2.5.1",
@ -135,5 +138,8 @@
"engines": {
"node": ">= 7.6.0",
"npm": ">= 4.1.2"
},
"ava":{
"files": ["test/**/*.js"]
}
}

@ -160,6 +160,10 @@ exports.filterRes = (list, rules) => {
});
};
/**
* 验证一个 path 是否合法
* path第一位必需为 /, path只容许由 字母数字-/_:. 组成, 最后一位不容许为 /
*/
exports.verifyPath = (path) => {
if (/^\/[a-zA-Z0-9\-\/_:\.]+$/.test(path)) {
if (path[path.length - 1] === '/') {
@ -172,6 +176,15 @@ exports.verifyPath = (path) => {
}
};
/**
* 沙盒执行 js 代码
* @sandbox Object context
* @script String script
* @return sandbox
*
* @example let a = sandbox({a: 1}, 'a=2')
* a = {a: 2}
*/
exports.sandbox = (sandbox, script) => {
const vm = require('vm');
sandbox = sandbox || {};
@ -215,6 +228,12 @@ exports.trim = trim;
exports.ltrim = ltrim;
exports.rtrim = rtrim;
/**
* 处理请求参数类型String 字符串去除两边空格Number 使用parseInt 转换为数字
* @params Object {a: ' ab ', b: ' 123 '}
* @keys Object {a: 'string', b: 'number'}
* @return Object {a: 'ab', b: 123}
*/
exports.handleParams = (params, keys) => {
if (!params || typeof params !== 'object' || !keys || typeof keys !== 'object') {
return false;
@ -226,7 +245,7 @@ exports.handleParams = (params, keys) => {
switch (filter) {
case 'string': params[key] = trim(params[key] + '');
break;
case 'number': params[key] = parseInt(params[key], 10);
case 'number': params[key] =!isNaN(params[key])? parseInt(params[key], 10) : 0;
break;
default: params[key] = trim(params + '');
}

@ -0,0 +1,49 @@
import test from 'ava';
import {
ltrim,
rtrim,
trim,
handleParams,
verifyPath,
sandbox
} from '../../server/utils/commons.js';
test('trim', t => {
t.is(trim(" a b ksjdfk "), 'a b ksjdfk');
t.is(trim(1), '1')
});
test('ltrim', t => {
t.is(ltrim(" a b ksjdfk "), 'a b ksjdfk ');
t.is(ltrim(1), '1')
});
test('rtrim', t => {
t.is(rtrim(" a b ksjdfk "), ' a b ksjdfk');
t.is(rtrim(1), '1')
});
test('handleParams', t=>{
t.deepEqual(handleParams({
a: ' s k ',
b: " a123456 "
}, {
a: 'string',
b: 'number'
}), {
a: 's k',
b: 0
})
})
test('verifyPath', t=>{
t.false(verifyPath('a/b'));
t.true(verifyPath('/a:b/t/.api/k_-/tt'))
t.false(verifyPath('/a:b/t/.api/k_-/tt/'))
})
test('sandbox', t=>{
t.deepEqual(sandbox({
a: 1
}, 'a=2'), {a : 2});
})