假设我有一个POST端点/user/:id
,并且此端点在内部调用函数getUserData(id)
,然后将结果返回给调用者,调用者在返回输出之后JSON.stringify()
ing。Mocha,Chai和Sinon:检查API的内部工作
现在,我需要确保至少调用一次getUserData(id)
。当我使用chai-http
向服务器发送邮件请求时,我该如何存根/窥探getUserData(id)
函数?这是否是一个正确的方法?
假设我有一个POST端点/user/:id
,并且此端点在内部调用函数getUserData(id)
,然后将结果返回给调用者,调用者在返回输出之后JSON.stringify()
ing。Mocha,Chai和Sinon:检查API的内部工作
现在,我需要确保至少调用一次getUserData(id)
。当我使用chai-http
向服务器发送邮件请求时,我该如何存根/窥探getUserData(id)
函数?这是否是一个正确的方法?
我将教程从https://scotch.io/tutorials/test-a-node-restful-api-with-mocha-and-chai调整为准系统server
和test
,您可以使用它来进行基本的API测试。
正如Mr.Phoenix所说,您不需要深入了解您的handler
的实质,只需将一些数据传递给您的端点,并根据您的预期检查结果。
这里有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
test.js
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()
})
})
})
谢谢,但是如果我想要进入细节呢?我正在为控制器编写单独的测试,正如@Phoenix先生所建议的那样 –
通常你只包括控制器一个单独的测试和间谍,存根和模拟的东西,所以你可以测试控制器。 API测试不那么复杂,您只需发送请求并针对结果运行测试。看一下官方文档,它应该提供足够的信息来编写测试。 – Gntem