Node.js sinon拒绝调用存根,即使它已被调用
我正在使用sinon存根一个函数Node.js sinon拒绝调用存根,即使它已被调用,node.js,unit-testing,express,sinon,Node.js,Unit Testing,Express,Sinon,我正在使用sinon存根一个函数res.status,res.status在下面的两个单元测试中都被调用,一个通过,另一个失败,我甚至一行一行地进行调试,看到函数正在被调用,但sinon失败了,说函数没有被调用 这是我正在测试的控制器(ActivityController.js) 这里是单元测试,第一个测试通过了,但是第二个测试没有通过 it('should return Activity obj with status 200', async () => { expe
res.status
,res.status在下面的两个单元测试中都被调用,一个通过,另一个失败,我甚至一行一行地进行调试,看到函数正在被调用,但sinon失败了,说函数没有被调用
这是我正在测试的控制器(ActivityController.js)
这里是单元测试,第一个测试通过了,但是第二个测试没有通过
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
存根res.calledOnce
可能不是真的,因为它可能被多次调用。是否在每次测试之间重置res.status
存根res.calledOnce
可能不是真的,因为它可能被多次调用。似乎在等待sinon.assert.calledWith
之前立即调用了expect(res.status.calledOnce).to.equal(true)
将wait
放在sinon.assert之前解决了该问题
所以正确的代码是
it('should return status 500 on server error', async () => {
sinon.stub(ActivityService, 'findActivity').rejects()
await ActivityController.findActivity(req, res)
await sinon.assert.calledWith(ActivityService.findActivity, req.params.id, req.user)
expect(res.status.calledOnce).to.equal(true)
sinon.assert.calledWith(res.status, 500)
})
似乎在等待sinon.assert.calledWith
之前立即调用了expect(res.status.calledOnce).to.equal(true)
将wait
放在sinon.assert之前解决了该问题
所以正确的代码是
it('should return status 500 on server error', async () => {
sinon.stub(ActivityService, 'findActivity').rejects()
await ActivityController.findActivity(req, res)
await sinon.assert.calledWith(ActivityService.findActivity, req.params.id, req.user)
expect(res.status.calledOnce).to.equal(true)
sinon.assert.calledWith(res.status, 500)
})
是的,在我运行的每个测试之后,sinon.restore()
我还检查了res,callCount设置为0,这样sinon甚至没有在我运行的每个测试之后将其设置为calledUp
我还检查了res,callCount设置为0,因此sinon甚至没有将其设为called。您可以共享部分代码,说明如何在测试中定义res
?您可以共享部分代码,说明如何在测试中定义res
?