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:
parent
556e8a1dec
commit
ad3d201a4e
18
package.json
18
package.json
@ -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 + '');
|
||||
}
|
||||
|
49
test/server/commons.test.js
Normal file
49
test/server/commons.test.js
Normal file
@ -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});
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user