Как обращаться к вложенным функциям с помощью Sinon? - PullRequest
0 голосов
/ 04 июля 2019

Используя Sequelize в коде, я не могу заглушить важные его внутренние функции, такие как .save (), .scope () и т. Д. Похоже, вложение не работает.

КакВ рамках модульного тестирования тесты завершаются неудачно без надлежащей обработки этих функций, говоря: TypeError: Cannot read property '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()
    })

Как мне обратиться к внутренним / вложенным функциям?

1 Ответ

1 голос
/ 09 июля 2019

Я не пробовал ваш код полностью, но я думаю, что его можно решить, добавив save() в ответном ответе findByPk, поэтому subscription.save() существует.

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

Надеюсь, что это работает!

...