如何使用 sinon 覆盖在 Node.js 中的控制器函数中定义的函数。
- route.js 文件会监听 /search api 调用并调用控制器函数
- 控制器搜索函数将调用通用 API 调用函数,该函数需要所有 API 调用详细信息,如 url、req、res、方法和回调函数。此搜索函数内部定义了一个函数
responseParser
,我们将其作为genericAPICall
参数传递给successCallback
函数,该参数将由genericAPICall
函数调用并进行解析来自genericAPICall
的 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,'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
})
})
})