Как обойти jest setTimeout ошибку 5000 мс, управляя обещаниями (Async и Await) - PullRequest
0 голосов
/ 14 октября 2019

Я написал функцию Async / Await, чтобы возвращать обещания для отчета и анализа драйверов. У меня есть три различных файла API обещаний, из которых я извлек детали для анализа. Несмотря на то, что я выполнил тест, я получаю ошибку Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error:

Я реорганизовал свой код более трех раз за два дня, но ошибка возвращается.

Я хотел бы знать, как управлять своимобещания, возможно, что-то не так хорошо, и я заинтересован в этом для оптимизации.

Есть ли способ управлять обещаниями в приведенном ниже коде, чтобы обойти шутку?

любойДругое предложение будет высоко оценено. NB: извините, я разместил весь код для лучшего понимания.

code

const { getTrips } = require('api');
const { getDriver } = require('api')
const { getVehicle } = require('api')

/**
 * This function should return the data for drivers in the specified format
 *
 * Question 4
 *
 * @returns {any} Driver report data
 */

async function driverReport() {
  // Your code goes here
  let trip = await getTrips()
  trip = trip.map(item => {
    item.billedAmount = parseFloat(item.billedAmount.toString().replace(',', '')).toFixed(2);
    return item;
  })
  let getId = trip.reduce((user, cur) => {
    user[cur.driverID] ? user[cur.driverID] = user[cur.driverID] + 1 : user[cur.driverID] = 1
    return user
  }, {})
  // console.log(getId)

  let mapId = Object.keys(getId)
  // console.log(mapId)

  let eachTripSummary = mapId.reduce((acc, cur) => {
    let singleTrip = trip.filter(item => item.driverID == cur)
    acc.push(singleTrip)
    return acc
  }, [])
  // eachTripSummary = eachTripSummary[0]
  // console.log(eachTripSummary)

  // console.log(trip)
  let reducedReport = eachTripSummary.reduce(async(acc, cur) =>{

    acc = await acc
    // console.log(acc)
    let user = {}

    let cash = cur.filter(item => item.isCash == true)
    // console.log(cash.length)
    let nonCash = cur.filter(item => item.isCash == false)

    let driverSummary = await getDriverSummary(cur[0]['driverID'])
    let trips = []
    let customer = {}
    cur[0].user ? (customer['user'] = cur[0]['user']['name'], customer['created'] = cur[0]['created'], customer['pickup'] = cur[0]['pickup']['address'],
      customer['destination'] = cur[0]['destination']['address'], customer['billed'] = cur[0]['billedAmount'], customer['isCash'] = cur[0]['isCash']) : false
    trips.push(customer)

    let vehicles = []
    if(driverSummary == undefined){
      // console.log(cur)
      user = {
        id: cur[0]['driverID'],
        vehicles: vehicles,
        noOfCashTrips: cash.length,
        noOfNonCashTrips: nonCash.length,
        noOfTrips: cur.length,
        trips: trips
      }
      acc.push(user)
      // console.log(user)
      return acc
    }
    let driverInfo = driverSummary[0]
    let vehicleInfo = driverSummary[1]
    let { name, phone } = driverInfo
    let { plate, manufacturer } = vehicleInfo[0]
    // console.log(plate)
    let vpm = {
      plate,
      manufacturer
    }
    vehicles.push(vpm)
      // console.log(cash.length)
      user ={
        fulName: name,
        phone,
        id: cur[0]['driverID'],
        vehicles: vehicles,
        noOfCashTrips: cash.length,
        noOfNonCashTrips: nonCash.length,
        noOfTrips: cur.length, 
        trips: trips
      }

      acc.push(user)
      // console.log(acc)

    return acc
  }, [])
  // reducedReport.then(data =>{console.log(data)})
  return reducedReport

}

async function getDriverSummary(param) {

  let driverDetails = await getDriver(param)
  .then(data => {return data}).catch(err => {return err})
  // console.log(driverDetails)
  let vehicleDetails;
  let { vehicleID } = driverDetails
  if(driverDetails != "Error" & vehicleID != undefined){

    // console.log(vehicleID)
    vehicleDetails = vehicleID.map(async item => {
      let vehicleSummary = getVehicle(item)
      return vehicleSummary
    })
    // console.log(await vehicleDetails)

    return await Promise.all([driverDetails, vehicleDetails])

  }
}


driverReport().then(data => {
  console.log(data)
})




module.exports = driverReport;

1 Ответ

1 голос
/ 14 октября 2019

Используйте jest.setTimeout(30000);, чтобы увеличить время ожидания. Это увеличит время ожидания во всем мире.

// jest.config.js
module.exports = {
  setupTestFrameworkScriptFile: './jest.setup.js'
}
// jest.setup.js
jest.setTimeout(30000)

Или вы можете использовать пример пользовательского теста, подобный этому

describe("...", () => {
    test(`...`, async () => {
        ...
    }, 30000);
});
...