У меня есть простая функция js, которая пытается подключиться к mongodb через Promise, и любой из них завершается неудачно.
const MongodbService = () => {
mongoose.connect(mongodbUrl, options).then(() => {
logger.info('Mongodb Connected', { url: process.env.MONGODB_URL })
}).catch(err => {
logger.error('Mongodb: ${err}', { url: process.env.MONGODB_URL })
})
return mongoose
}
и я хочу просто проверить это. Я издеваюсь над регистратором:
import logger from '../../../config/winston'
jest.mock('../../../config/winston')
У меня есть спецификация для успешного тестирования, которая работает, как и ожидалось:
it('it should handle a connection success', async () => {
mongoose.connect = jest.fn(() => Promise.resolve())
await MongodbService()
expect(logger.info.mock.calls[0][0]).toEqual('Mongodb Connected')
expect(logger.info.mock.calls[0][1]).toEqual({ url: 'mongodb://mongodb/jb-dev' })
})
У меня есть другой, который проверяет на отказ, и вот где я застрял:
it('it should handle a connection failure', async () => {
mongoose.connect = jest.fn(() => Promise.reject(new Error('boom')))
await MongodbService()
expect(logger.error.mock.calls[0][0]).toEqual('Mongodb Error: boom')
})
Это ошибка, указывающая на то, что регистратор не был вызван, даже если я добавляю console.log в функцию, я вижу, что он был правильно вызван. Если я добавлю setTimeout вокруг ожидаемого значения, я смогу увидеть, как вызывается регистратор, но он вызывался дважды. Я думаю, что мне не хватает чего-то простого. Кто-нибудь может указать мне правильное направление?