Js的测试明明可以更简单
之前的js测试都是自己手写的, 有感于每个项目都会重写, 每个接口版本都要重写, 因此, 决定用一下测试库, 比如mocha这种.
找到了大神
然后发现这些框架的语法都好烦啊. 最终我找到了js application的作者: https://medium.com/@_ericelliott
作者推荐用他写的:
- https://medium.com/javascript-scene/rethinking-unit-test-assertions-55f59358253f
- https://github.com/ericelliott/riteway
然后我发现还能简化
目前正在简化中, 我心目中的测试应该就是一个json;
let 测试用例json={
"info": "uds主逻辑主接口的测试",
"url": "http://localhost:8080/uds/", //这个代表接口测试
"method": "./xxx.js/ooo", //这个代表测试xxx.js里面的ooo方法.
"outputcheck":"include", //这个是测试用的方法, 其实deep include是我认为测试唯一需要的比较方法, 而不是deep equal, 所以, 这个我也考虑隐藏.
//equal和include都是需要的, array需要equal, 因为顺序是相关的, object只要include就好了.
"input": {...}, //这个是测试时输入的参数.
"output":{...}, //这个是用来比对的输出参数. 只要实际输出deep包含这个, 那么测试就是通过的.
}
现在的测试用例是这么写的:
describe('index基础测试', async assert => {
//.....这里做测试的调用
assert({
given: `处理用例:./testcase/${filelist[i]}`,
should: '应该[包含正确结果, 未来扩展一下, 现在判断的是相等',
actual: httpresult,
expected: output,
});
});
我的对应关系是:
1. describe -> 文件名
2. given, should -> info
3. actual = method(input) 或者httprequest(url)调用结果
4. expected -> output
然后按照tap做输出就好了. 研究下 nyc, tap-nirvana
2019-05-10 更新
node可以直接执行某个模块中的函数, 前提是这个函数被export了, 所以框架应该自动执行所有的test, 所有的文件都应该有一个默认的test.
//common.js写法
node -e 'require("./db").init()'
//es6写法, es6 直接这么搞有点麻烦, 没搞定. 所以es6我就新建一个test.js