Асинхронная функция работает с почтальоном, но не во время тестирования - PullRequest
0 голосов
/ 22 декабря 2019

У меня есть функция, которая на основе сервисов выбирает их время и суммирует его. Службы должны быть сначала извлечены из базы данных mongoDb, поэтому я написал функцию, которая является async

функцией, которая извлекает время из служб

const getTotalVisitsTime = async (services) => {
    let totalVisitTime = 0
    const foundServices = await require('../visitType').find({ _id: { $in: services } })
    if (foundServices) {
        return new Promise((resolve, reject) => {
            if (foundServices.length === 0) {
                reject('No services for given id(s) found in database')
            } else {
                for (var i = 0; i < foundServices.length; i++) {
                    totalVisitTime += parseInt(foundServices[i].time)
                }
                resolve(totalVisitTime)
            }
        })
    } else {
        throw Error('Problem with querying services ocurred. Check id(s)')
    }
}

Использование:

module.exports.getAvailableVisitTimesByDate = async (hairdresserId, date, services, salonData) => {
    return getAvailableVisitTimesArray(await getVisitsForGivenDay(hairdresserId, date),
        salonData,
        await getTotalVisitsTime(services).catch(err => { console.log(err) }))
}

При тестировании через Postman он выбирает все необходимые данные, но я хотел проверить это с chakram. В тестовом случае, к сожалению, он не выбирает время, что приводит к пустому массиву в тесте.

Тестовый случай:

    it('should return array of available visit times for certain hairdresser, 1 hour-long visit and certain day (10-03-2019)', () => {
        return chakram.get(url, requestBody, { headers: { 'content-type': 'application/json' } })
            .then(response => {
                expect(response).to.have.status(201)
                console.log(response.body)
                //expect(response.body['freeVisitTimes']).to.eql(expectedArrayOfTimes)
            })
    })

При тестировании регистрируется, что getTotalVisitsTime равно undefined, в то время как выполнение запроса через Почтальон приводит к целому числу, которое описывает время. Что не так с моим кодом?

1 Ответ

0 голосов
/ 22 декабря 2019

const foundServices = await require ('../ visitType'). Find ({_id: {$ in: services}}). Exec ();не забудьте .exec ();

...