如何覆盖 Node js 控制器函数中定义的函数的测试用例覆盖率

时间:2021-08-01 19:50:32

标签: node.js express chai sinon

如何使用 sinon 覆盖在 Node.js 中的控制器函数中定义的函数。

  1. route.js 文件会监听 /search api 调用并调用控制器函数
  2. 控制器搜索函数将调用通用 API 调用函数,该函数需要所有 API 调用详细信息,如 url、req、res、方法和回调函数。此搜索函数内部定义了一个函数 responseParser,我们将其作为 genericAPICall 参数传递给 successCallback 函数,该参数将由 genericAPICall 函数调用并进行解析来自 genericAPICall
  3. 的 API 响应

在这种情况下,responseParser 没有得到测试覆盖率,如何模拟它以得到覆盖率?

下面的代码

//route.js
const controller = reuqire('./controller.js')
router.get('/search', controller.search)

// genericFetch.js
const genericAPICall = (req, res, apiMethod, successCallback) => {
 //do some fetch
  //on success 444``` status call the successCallback function
  fetch('urs')
  .then(res => {
   successCallback(res)
  })
 }

//controller.js
search = (req, res) => {
 const responseParser = (response) => {
 // do something with response
  return response
}
utils.genericAPICall(
req, 
res,
'GET',
successCallback: responseParser
)}

//route.test.js
const utils = require( './utils.js')

describe('test the route', () => {
 beforeEach(()=>{
  sinon.stub(utils, 'genericAPICall').resolves({statusCode: 200})
 })
it('test the search route', (done) => {
 chai
  .request(app)
  .get('/search')
  .set('token', 'test1234')
  .send({name: 'abcd'})
  .end(err, res) => {
    expect(res.statusCode).to.equal(```200```);
    done
  })
 })
})

0 个答案:

没有答案