更改Mock Server端口
//将Mock Server的端口指定为3004
json-server --watch db.json --port 3004
使用HTTPS
大部分的接口都是HTTPS的,json-server也支持HTTPS
首先,在项目根目录下新建js文件并命名为server.js,然后写入如下代码
var fs = require('fs'),
https = require('https'),
jsonServer = require('json-server'),
server = jsonServer.create(),
router = jsonServer.router('db.json'),
middlewares = jsonServer.defaults();
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
server.use(middlewares);
server.use(router);
https.createServer(options, server).listen(3002, function() {
console.log("json-server started on port " + 3002);
});
然后生成本地SSL Cert文件,前提是已经安装了openssl,下载地址为https://www.openssl.org/,安装后,在项目的根目录下,命令行执行如下命令
//生成cert
openssl req-x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 120 -nodes
然后启动json-server
//将以https方式启动
node server.js
然后便可以访问HTTPS的服务,用浏览器打开http://localhost:3002,自己生成的SSL Cert在用浏览器打开服务地址的时候会有个warning,忽略即可
使用自定义路由
通常情况下API的路由格式均为xxx.domain/api/xxx,但是需要做一下改造才能以这种格式访问,在项目的根目录下新建js文件并命名为testRoutes.js
var fs = require('fs'),
https = require('https'),
jsonServer = require('json-server'),
server = jsonServer.create(),
router = jsonServer.router('db.json'),
middlewares = jsonServer.defaults();
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
//给路由起别名
server.use(jsonServer.rewriter({
"/api/*": "/$1",
"/:resource/:id/show": "/:resource/:id",
"/posts/:category": "/posts?category=:category",
"/articles\\?id=:id": "/posts/:id"
}));
server.use(middlewares);
server.use(router);
https.createServer(options, server).listen(3002, function() {
console.log("json-server started on port " + 3002);
});
路由设置好后,启动json-server
//将Mock Server以https方式启动
node testRoutes.js
然后,通过浏览器访问如下地址
https://localhost:3002/api/user
https://localhost:3002/api/user/1
https://localhost:3002/api/user/1/show
https://localhost:3002/api/user?id=1
https://localhost:3002/api/user?title=tony
模拟HTTP Status Code
在e2e测试中,往往请求返回的并非200,Mock Server也同样支持,在项目根目录下新建js文件,并命名为testMockHttpStatusCode.js,然后写入如下内容
var fs = require('fs'),
https = require('https'),
jsonServer = require('json-server'),
server = jsonServer.create(),
router = jsonServer.router('db.json'),
middlewares = jsonServer.defaults();
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
//自定义 api/user 这个路由的 http status code。
//本例简单判断, POST 请求返回 400, 其它请求返回 200
server.post('/api/user', (req, res) => {
//这里写您希望的处理逻辑
if (req.method === 'POST') {
res.status(400).jsonp({
error: "Bad userId"
});
}else {
res.status(200).jsonp(res.locals.data);
}
});
server.use(middlewares);
server.use(router);
https.createServer(options, server).listen(3002, function() {
console.log("json-server started on port " + 3002);
});
然后再integration文件夹下建立测试文件testMock.js,并写入如下内容
describe('测试POST API', () => {
const item = {"id":210, "title": "kevin", "name": "kevin" }
it('POST会新增一个用户', () => {
//检查user内容增加了.
cy.request('https://localhost:3002/user').then((res)=>{
expect(res.status).to.be.equal(200)
expect(res.body.length).to.be.equal(5)
})
cy.request({
method: 'POST',
//添加 user 信息
url: 'https://localhost:3002/api/user',
headers: {'Content-Type': 'application/json'},
body: item
})
})
})
然后启动json-server
node testMockHttpStatusCode.js
然后在交互模式下运行testMock.js,能够发现GET请求正常返回,而POST请求返回的是400
自动生成Mock数据
Mock数据的生成,可以直接写入,也可以用程序生成,faker.js是用于生成伪造数据的JavaScript库,常常用来Mock各种数据,执行命令npm install faker --save-dev安装faker,然后新建js文件,并命名为testMockDataGen.js,然后写入如下内容
const faker = require('faker');
const fs = require('fs')
function generateUsers() {
let users = []
for (let id=1; id <= 100; id++) {
let name = faker.name.firstName() + faker.name.lastName();
let title = faker.name.jobTitle();
users.push({
"id": id,
"name": name,
"title": title
});
}
return { "data": users }
}
let dataObj = generateUsers();
fs.writeFileSync('data1.json', JSON.stringify(dataObj, null, '\t'));
然后启动json-server
//以https方式启动
node testMockDataGen.js
本文介绍了如何更改MockServer端口,并使用json-server创建HTTPS服务,包括配置本地SSL证书、自定义路由和HTTP状态码。此外,还展示了如何生成Mock数据,以及进行相关测试。
504

被折叠的 条评论
为什么被折叠?



