Node.js 摩卡、柴和;Sinon:检查API的内部工作

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测试 正如菲尼克斯先生所说,您不需要深入了解处理程序的本质,只需将

假设我有一个POST端点
/user/:id
,该端点在内部调用函数
getUserData(id)
,然后将结果返回给调用者,调用者在
JSON.stringify()之后返回输出


现在,我需要确保至少调用一次
getUserData(id)
。当我使用http向服务器发出post请求时,如何使用stub/spy
getUserData(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的建议,我正在为控制器编写单独的测试