我正在使用 sinon 来 stub 函数 res.status
,在下面的两个单元测试中都调用了 res.status,一个通过,另一个失败,我什至调试并逐行查看函数正在被调用,但 sinon 失败并说该函数没有被调用。
这是我正在测试的 Controller (ActivityController.js)
exports.findActivity = (req, res) => {
ActivityService.findActivity(req.params.id, req.user).then(result => {
res.status(200).json({result: result})
}).catch(err => {
res.status(500).json({msg: err.message})
})
}
这是单元测试,第一个测试很好,但第二个测试没有
it('should return Activity obj with status 200', async () => {
expectedResult = activity
sinon.stub(ActivityService, 'findActivity').resolves(expectedResult)
await ActivityController.findActivity(req, res)
sinon.assert.calledWith(ActivityService.findActivity)
expect(res.status.calledOnce).to.equal(true)
sinon.assert.calledWith(res.status, 200)
})
it('should return status 500 on server error', async () => {
sinon.stub(ActivityService, 'findActivity').rejects()
await ActivityController.findActivity(req, res)
sinon.assert.calledWith(ActivityService.findActivity, req.params.id, req.user)
expect(res.status.calledOnce).to.equal(true)
sinon.assert.calledWith(res.status, 500)
})
我调试了第二个单元测试,看到 ActivityController 通过 catch 并调用 res.status(500)
但单元测试在 res.status.calledOnce
中失败
最佳答案
您是否在每次测试之间重置 res.status
stub ? red.usedOnce
可能不正确,因为它可能被调用多次一次。
关于node.js - sinon 否认一个 stub 被调用,即使它被调用了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009637/