node.js - sinon 否认一个 stub 被调用,即使它被调用了

标签 node.js unit-testing express sinon

我正在使用 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/

相关文章:

java - EasyMock - 覆盖对象创建

unit-testing - 应该测试模型类吗?

express - 继续在序列化和反序列化我的 PassportJS 用户时遇到问题

javascript - 最佳NodeJs MVC框架

mysql - 如何在nodejs中处理Promise

node.js - 直接在浏览器中使用 NPM 模块

node.js - 删除与 RavenDB 中的条件匹配的特定集合的多个文档

c# - 如何针对传递到模拟存储库的对象进行断言

node.js - 负载测试主干应用程序

javascript - 如何将数组从一个函数传递到另一个函数作为云函数中的引用