如何使 nock.js 回复发布的数据?
how to make nock.js reply posted data?
给出这个函数:
createTrip: function(trip, userId) {
trip.userId = userId
trip.id = uuid()
return axios
.post(`${url}/trips`, trip)
.then(res => res.data)
.catch(error => error)
}
而这个测试:
tripToCreate = {
"name": "Iceland 2017",
"start": "2017-04-07",
"end": "2017-04-29",
"parts": []
}
describe('#createTrip', function() {
it('should post the trips to the REST API', async function() {
nock(baseUrl)
.post('/trips')
.reply(201)
data = await tripDao.createTrip(tripToCreate, 'u1')
console.log(data)
expect(data.id).to.match(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/)
expect(data.userId).to.equal(tripToCreate.userId)
expect(data.name).to.equal(tripToCreate.name)
expect(data.start).to.equal(tripToCreate.start)
expect(data.end).to.equal(tripToCreate.end)
})
})
我想用发布的数据回复(因此模拟 json-server 的行为)。
由于数据是在添加 2 个字段后由 createTrip() 函数发布的,我不能简单地 return 硬编码数据。
是否可以使用箭尾(或其他 "mocking" 工具)?
加分问题:做这个测试真的有意义吗?或者使用专用 json-服务器进行集成测试的真正集成测试会更好?
在此先感谢您的帮助!
是的,这是诺克支持的。请参阅文档的这一部分:
https://github.com/nock/nock#specifying-replies
此处给出的示例完全符合您的要求:
const scope = nock('http://www.google.com')
.post('/echo')
.reply(201, (uri, requestBody) => requestBody)
虽然至于编写什么样的测试是有意义的,但重要的是要考虑您要测试的行为是什么。 nock 最适合测试客户端(无需设置真实服务器),而其他模拟库(如 node-mocks-http 更适合测试服务器端点(无需设置真实客户端)。
给出这个函数:
createTrip: function(trip, userId) {
trip.userId = userId
trip.id = uuid()
return axios
.post(`${url}/trips`, trip)
.then(res => res.data)
.catch(error => error)
}
而这个测试:
tripToCreate = {
"name": "Iceland 2017",
"start": "2017-04-07",
"end": "2017-04-29",
"parts": []
}
describe('#createTrip', function() {
it('should post the trips to the REST API', async function() {
nock(baseUrl)
.post('/trips')
.reply(201)
data = await tripDao.createTrip(tripToCreate, 'u1')
console.log(data)
expect(data.id).to.match(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/)
expect(data.userId).to.equal(tripToCreate.userId)
expect(data.name).to.equal(tripToCreate.name)
expect(data.start).to.equal(tripToCreate.start)
expect(data.end).to.equal(tripToCreate.end)
})
})
我想用发布的数据回复(因此模拟 json-server 的行为)。 由于数据是在添加 2 个字段后由 createTrip() 函数发布的,我不能简单地 return 硬编码数据。 是否可以使用箭尾(或其他 "mocking" 工具)?
加分问题:做这个测试真的有意义吗?或者使用专用 json-服务器进行集成测试的真正集成测试会更好?
在此先感谢您的帮助!
是的,这是诺克支持的。请参阅文档的这一部分: https://github.com/nock/nock#specifying-replies
此处给出的示例完全符合您的要求:
const scope = nock('http://www.google.com')
.post('/echo')
.reply(201, (uri, requestBody) => requestBody)
虽然至于编写什么样的测试是有意义的,但重要的是要考虑您要测试的行为是什么。 nock 最适合测试客户端(无需设置真实服务器),而其他模拟库(如 node-mocks-http 更适合测试服务器端点(无需设置真实客户端)。