Node.js 摩卡、柴和;Sinon:检查API的内部工作
假设我有一个POST端点Node.js 摩卡、柴和;Sinon:检查API的内部工作,node.js,testing,mocha.js,sinon,chai-http,Node.js,Testing,Mocha.js,Sinon,Chai Http,假设我有一个POST端点/user/:id,该端点在内部调用函数getUserData(id),然后将结果返回给调用者,调用者在JSON.stringify()之后返回输出 现在,我需要确保至少调用一次getUserData(id)。当我使用http向服务器发出post请求时,如何使用stub/spygetUserData(id)函数?这是一种正确的方法吗?我将本教程从底层调整为一个基本的服务器和测试,您可以使用它进行基本的API测试 正如菲尼克斯先生所说,您不需要深入了解处理程序的本质,只需将
/user/:id
,该端点在内部调用函数getUserData(id)
,然后将结果返回给调用者,调用者在JSON.stringify()之后返回输出
现在,我需要确保至少调用一次getUserData(id)
。当我使用http向服务器发出post请求时,如何使用stub/spygetUserData(id)
函数?这是一种正确的方法吗?我将本教程从底层调整为一个基本的服务器和测试,您可以使用它进行基本的API测试
正如菲尼克斯先生所说,您不需要深入了解处理程序的本质,只需将一些数据传递给您的端点,并根据预期结果检查结果
以下是可用于执行此测试的2个文件:
index.js
const express = require('express')
const app = express()
app.get('/material',(req, res)=>{
res.json([])
//res.json(['stone', 'wood'])
})
function getUserData(id){
return 42
}
const port = 3031
app.listen(port, function(err){
console.log("Listening on port: " + port)
})
module.exports = app
process.env.NODE_ENV = 'test'
// const Material = require('./materials') // conroller
const chai = require('chai')
const chaiHttp = require('chai-http')
const server = require('./index')
const should = chai.should()
chai.use(chaiHttp)
describe('/GET material', () => {
it('it should get all the materials', (done)=>{
chai.request(server)
.get('/material')
.end((err, res) => {
res.should.have.status(200)
res.body.should.be.a('array')
res.body.length.should.be.eql(0) // start empty
done()
})
})
})
test.js
const express = require('express')
const app = express()
app.get('/material',(req, res)=>{
res.json([])
//res.json(['stone', 'wood'])
})
function getUserData(id){
return 42
}
const port = 3031
app.listen(port, function(err){
console.log("Listening on port: " + port)
})
module.exports = app
process.env.NODE_ENV = 'test'
// const Material = require('./materials') // conroller
const chai = require('chai')
const chaiHttp = require('chai-http')
const server = require('./index')
const should = chai.should()
chai.use(chaiHttp)
describe('/GET material', () => {
it('it should get all the materials', (done)=>{
chai.request(server)
.get('/material')
.end((err, res) => {
res.should.have.status(200)
res.body.should.be.a('array')
res.body.length.should.be.eql(0) // start empty
done()
})
})
})
通常,您只需将控制器包含在单独的测试和spy、stub和mock中,就可以测试控制器了。API测试不那么复杂,只需发送请求并对结果运行测试即可。看一看官方文档,它应该提供足够的信息来编写测试。谢谢,但是如果我真的想了解细节呢?按照@Mr.Phoenix的建议,我正在为控制器编写单独的测试