Node.js 如何使用Sinon处理嵌套函数?

Node.js 如何使用Sinon处理嵌套函数?,node.js,unit-testing,sinon,Node.js,Unit Testing,Sinon,在代码中使用Sequelize,我无法存根它的关键内部函数,如.save()、.scope()等。。筑巢似乎不起作用 作为单元测试的一部分,如果没有正确处理这些函数,测试就会失败,比如:TypeError:cannotreadproperty'returns'of undefined 在执行此行期间引发错误: subscription.save() 存根的实施: const deleteSubscription = async (subscriptionId) => { cons

在代码中使用Sequelize,我无法存根它的关键内部函数,如.save()、.scope()等。。筑巢似乎不起作用

作为单元测试的一部分,如果没有正确处理这些函数,测试就会失败,比如:
TypeError:cannotreadproperty'returns'of undefined

在执行此行期间引发错误:

  subscription.save()
存根的实施:

const deleteSubscription = async (subscriptionId) => {
  const ts = Math.floor(Date.now() / 1000)
  const subscription = await sql.Subscriptions.findByPk(subscriptionId);
  if (subscription == null) {
    throw new Error('Subscription not found', 'subscription_not_found')
  }
  subscription.deletedAt = ts
  subscription.save()
  return subscription
}
单元测试:


    it('deleteSubscription succeeds', async () => {
        subscriptionsSqlStub.save.returns({})
        subscriptionsSqlStub.findByPk.returns({
            id: 1
        })
        const subscription = await subscriptions.deleteSubscription(subscriptionsSqlStub)
        expect(subscription).to.have.deep.property('id', 1)
        sinon.assert.calledOnce(subscriptionsSqlStub.findByPk)
        subscriptionsSqlStub.findByPk.resetHistory()
    })

如何处理内部/嵌套函数?

我还没有完全尝试您的代码,但我认为可以通过在
findByPk
的返回响应中添加
save()
来解决此问题,因此
subscription.save()
存在

subscriptionsSqlStub.findByPk.returns({
  id: 1,
  save: () => true // adding save() here
});

希望它能起作用