Макет секвенирования неправильно работает с функцией секвенирования «подсчет»

#javascript #unit-testing #mocking #sequelize.js

Вопрос:

Когда я использую Sequelize Mock between с таким запросом:

 const {
    active,
    'in-progress': inProgress,
  } = await ImmediateCare.findAll({
    raw: true,
    attributes: ['status', [fn('count', col('id')), 'count']],
    group: ['ImmediateCare.status'],
  }).then((status) => {
    const counts = {
      active: 0,
      'in-progress': 0,
    }

    status.forEach((s) => {
      counts[s.status] = parseInt(s.count, 10)
    })

    return counts
  }) 

Возвращается NaN , я предполагаю, что это потому, что Sequelize Mock не может издеваться над sequelize.fn(«количество»)

Это правда?

Ответ №1:

Вы можете использовать Sinon вместе с секвенированием макета и заглушить вызов findAll с помощью макетных данных. Что-то вроде этого:

 const sinon = require('sinon');
const SequelizeMock = require('sequelize-mock');
describe('', () => {
beforeEach(() => {
const dbConnection = new SequelizeMock();
const dbStub = sinon.stub(dbConnection, 'define');
const queryStub = sinon.stub().resolves(mockImmediateCareData);
dbStub.returns({ findAll : queryStub })
})
})
 

Если это не поможет, не могли бы вы поделиться определенным макетом объекта?
Кроме того,. then() не требуется, так как ожидание уже используется.

Ответ №2:

Я шел по неверному пути

Это тест для данного метода.

Я не должен проверять ответ на количество последовательностей, мне просто нужно высмеять результат

введите описание изображения здесь