之前的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