Sinon отрицать, что заглушка вызывается, хотя он назывался - PullRequest
1 голос
/ 05 марта 2019

Я использую sinon для заглушки функции res.status, res.status вызывается в обоих модульных тестах ниже, один проход и другой сбой, я даже отладил и прошел построчно, и увидел, что функция вызывается, но sinonдает сбой и говорит, что функция не была вызвана.

это контроллер, который я тестирую (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

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Похоже, что expect(res.status.calledOnce).to.equal(true) был вызван непосредственно перед ожиданием sinon.assert.calledWith.

, когда await до 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)
    })
0 голосов
/ 05 марта 2019

Сбрасываете ли вы заглушку res.status между каждым тестом?res.calledOnce может быть неверным, поскольку его можно назвать больше , чем один раз.

...