背景
由于需求不断更改,项目前后端分离后,后端开发人员经常需要改字段加字段,也有可能删掉接口,这时候前端如果没有相对应的调整,就容易造成bug。为了解决这个问题,我们需要对接口进行测试。
测试被调用接口
- 返回的数据类型判断
- 接口返回的数据结构变化(添字段或者删字段)
- 接口路径变化(导致接口请求失败)
- 接口是否异常
单元测试jest
单元测试选择jest,在jest没有找到我要的断言方法,所有需要自己通过expect.extend
扩展。
使用方式,例如response data
received
{
"code":"0",
"msg":"",
"version":3.14,
"data":[
{"name":"平台同步","id":0},
{"name":"商城同步","id":1},
{"name":"人工录入","id":2},
{"name":"开放平台","id":3}
]
}
模板(expected)
{
"code":"@String",
"msg":"@String",
"version":"@Number && @this < 4 ",
"data":[
{"name":"@String","id":"@Number"},
]
}
模板的属性值介绍
@String
其实是个表达式, 自定义插件内部会将@String
转化为:
Object.prototype.toString.call(val) === [object String']
其实你还可以这么写@String || @Number
转化后:
Object.prototype.toString.call(val) === '[object String]' || Object.prototype.toString.call(val) === '[object Number]'
@this
等于当前属性值, 例如: @this < 4
会转换为3.14 < 4
表达式
只要条件表达式为false
, 那说明这个字段异常,那么断言就失败。
返回的数据类型判断
received
{
"code":"0",
"msg":"",
"version":"3.13",
"data":[
{"name":true,"id":0},
{"name":"商城同步","id":1},
{"name":"人工录入","id":2},
{"name":"开放平台","id":3}
]
}
模板(expected)
{
"code":"@String",
"msg":"@String",
"version":"@Number",
"data":[
{"name":"@String","id":"@Number"},
]
}
运行结果
假设后台将字段
version
类型改为String
,data[0].name
类型改为Number
接口返回的数据结构变化(添字段或者删字段)
received
{
"code":"0",
"msg":"",
"data":[
{"name":"平台同步","id":0, "orderId": 2},
{"name":"商城同步","id":1},
{"name":"人工录入","id":2},
{"name":"开放平台","id":3}
]
}
模板(expected)
{
"code":"@String",
"msg":"@String",
"version":"@Number",
"data":[
{"name":"@String","id":"@Number"},
]
}
运行结果
假设后台删除了
version
字段, 在data
数组第一个元素加入orderId
字段
快速生成模板工具
如果一个接口有几十上百个字段,每个字段都手动定义类型,这个工作量就太大了。如果我们将后台response
的json数据复制过来转换成对比模板 , 这样效率就大大提升,不需要为每个字段去定义类型。
为了快速生成对比模板,我们应该写个工具,比如:
执行脚本配置
package.json
"scripts": {
"build:prod": "npm run test:prod && webpack --config build/webpack.prod.conf.js",
"build:dev": "npm run test && node build/webpack.dev.conf.js",
"test": "cross-env NODE_ENV=development jest --config test/unit/jest.conf.js",
"test:prod": "cross-env NODE_ENV=production jest --config test/unit/jest.conf.js",
"test:ui": "anywhere -d test/unit/extends/eqTemplate/ui -p 20010"
},
build:dev
跑完接口测试再build
吧。
转载:https://blog.csdn.net/weixin_44520133/article/details/89101995
查看评论