#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()
не требуется, так как ожидание уже используется.