【问题标题】:Mocha, Chai & Sinon: Checking internal working of an APIMocha、Chai 和 Sinon:检查 API 的内部工作
【发布时间】:2017-04-12 15:36:13
【问题描述】:

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

现在,我需要确保至少调用一次 getUserData(id)。当我使用chai-http 向服务器发出发布请求时,如何存根/监视getUserData(id) 函数?这甚至是正确的方法吗?

【问题讨论】:

  • 通常你只需将控制器包含在一个单独的测试中,并 spy、stub 和 mock 东西,这样你就可以测试控制器了。 API 测试不太复杂,您只需发送请求并针对结果运行测试。查看官方文档,它应该提供足够的信息来编写测试。

标签: node.js testing mocha.js sinon chai-http


【解决方案1】:

我将教程从 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()
    })
  })
})

【讨论】:

  • 谢谢,但如果我想深入了解细节怎么办?正如@Mr.Phoenix 建议的那样,我正在为控制器编写单独的测试
猜你喜欢
  • 2015-12-01
  • 2020-10-11
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2018-04-08
相关资源
最近更新 更多