Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

115
Views
Async Await with Mocha + Axios TrobuleShooting

we are using mocha + nodejs + axios

Below is the piece of code i have , they are all in different file.

File 1 : IT block

   it('Perform Post Payment Actions', function () {
    postPaymentController.triggerPostPaymentActions(params);
  });

File 2 : Controller

module.exports.triggerPostPaymentActions = function (params) {
  const actions = params.postAuthActionId.split('-');  // // 'PARTIALREFUND, 50, SUCCESS - PARTIALREFUND, 50, FAIL

  Object.entries(actions).forEach(([, action]) => {
    const actionAsArray = action.split(','); // 'PARTIALREFUND, 50, SUCCESS 

    switch (actionAsArray[0]) {. // PARTIALREFUND
      case 'PARTIALREFUND':
        paymentsPartialRefundApi.submitPaymentsPartialRefundApi(actionAsArray, params);
        break;
      default:
        break;
    }
  });
};

File 3: Acutal API Call using axios


module.exports.submitPaymentsPartialRefundApi = async function (actionDetails, params) {

  const postOptions = {
    url: partialRefundApiUri,
    method: 'POST',
    headers: restHeaders,
    data: params.partialRefundRequest,
  };

  try {
    const response = await axios(postOptions);
    params.partialRefundResponse = response.data;
    process.env.PARTIALREFUNDRESPONSE = JSON.stringify(params.partialRefundResponse);
  } catch (err) {
    process.env.ERRORCODE = err;
    process.env.SCRIPT_STATUS = 'failure';
    process.env.PARTIALREFUNDRESPONSE = 'Partial Refund request Failed';
    throw err;
  }



};

PROBLEM :

When the control is passed to submitPaymentsPartialRefundApi , then it builds the request for axios but rather than waiting for the axios call , it takes the control back to the switch case. my expectation was that since i am using async await it will execute and wait till the axios call is completed but rather than completing the call it returns the control back to the switch statement and from the switch it goes back to the IT block. so i have 2 problems. 1 Its not waiting for the axios call to end 2 Its not running switch twice in loop , its goes back to IT block and then comes back.

Solutions Tried :

I already tried using promises for this , with and without timeout but still it did not worked. Any help on this is appreciated.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

submitPaymentsPartialRefundApi is an asynchronous function but you are not awaiting its completion in your controller.

Your code is very weird and I don't understand what it is supposed to do as you don't return anything from your controller function and your test script does not actually test anything. That being said, your controller needs to do something like the following:

module.exports.triggerPostPaymentActions = function (params) {
  const actions = params.postAuthActionId.split('-');  // // 'PARTIALREFUND, 50, SUCCESS - PARTIALREFUND, 50, FAIL
  
  return Promise.all(Object.entries(actions).map(([, action]) => {
    const actionAsArray = action.split(',');

    switch (actionAsArray[0]) {
      case 'PARTIALREFUND':
        return paymentsPartialRefundApi.submitPaymentsPartialRefundApi(actionAsArray, params);
        break;
      default:
        // return something here or use Array.filter before Array.map
        break;
    }
  }));
}

Then your it block should test that the returned promise gets resolved or something...

it('Perform Post Payment Actions', function () {
    return expectAsync(postPaymentController.triggerPostPaymentActions(params)).toBeResolved();
});
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!