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

140
Views
Prueba de broma completada antes de que se haya resuelto la promesa

Esta es mi primera publicación en stackoverflow, así que por favor sean amables...

Estoy tratando de usar Jest para hacer algunas pruebas de extremo a extremo de una función que se comunica con un contrato inteligente implementado en una cadena de bloques de desarrollo local.

Los problemas que tengo probablemente se deban a mi falta de comprensión completa de cómo funcionan las promesas y el ciclo de eventos, pero la prueba se completa antes de que se complete la función de participación.

Aquí está la prueba:

 test('stake', async () => { let tokenId; // test set up - make sure the address owns at least 1 NFT const currentBalance = (await nftContract.balanceOf(address)).toNumber(); if (currentBalance > 0) { tokenId = (await stakingContractAddress.tokenOfOwnerByIndex(address, 0)).toNumber(); } else { // if address owns no NFTs, mint one await mint(address) } // pre stake const addressBalance = (await nftContract.balanceOf(address)).toNumber(); const stakedBalance = (await stakingContractAddress.numStaked(address)).toNumber(); console.log(`addressBalance: ${addressBalance}`) // should be 1 console.log(`stakedBalance: ${stakedBalance}`) // should be 0 // stake await stake(tokenId, address); // I want this to fully complete before moving on. // post stake const newAddressBalance = (await nftContract.balanceOf(address)).toNumber(); const newStakedBalance = (await stakingContractAddress.numStaked(address)).toNumber(); console.log(`newAddressBalance: ${newAddressBalance}`) // should be 0 but is still 1 console.log(`newStakedBalance: ${newStakedBalance}`) // should be 1 but is stil 0 expect(newStakedBalance).toEqual(addressBalance); expect(newAddressBalance).toEqual(stakedBalance); });

Aquí está la función de apuesta:

 async function stake(tokenId, _address) { try { const tx = await nftContract['safeTransferFrom(address,address,uint256,bytes)']( _address, // from stakingContractAddress, // to tokenId, gas_price ); await tx.wait(); // this is meant to wait until the transaction is mined on-chain } catch (err) { logger.info({message: err}); process.exit(1); } }

Intenté agregar en espera deliberada (a continuación) justo después de que se llama a la función de participación en la prueba. Pero esto no tiene ningún efecto. También parecía que no debería ser necesario, ya que la transacción con la cadena de bloques local debería completarse al instante.

 function wait(ms){ console.log(`waiting ${ms /1000} seconds`) var start = new Date().getTime(); var end = start; while(end < start + ms) { end = new Date().getTime(); } }

He pasado tanto tiempo tratando de encontrar una solución a esto sin suerte.

¡Cualquier ayuda sería muy apreciada!

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

0

Entonces, después de pensarlo un poco, reestructuré toda la aplicación para hacerla más modular y comprobable.

La aplicación inicial fue un solo script, que funcionó pero no se pudo probar.

El método Stake, entre otros, ahora está en su propio módulo y he podido probar con éxito la funcionalidad.

Moraleja de esta historia: escriba código modular y piense en probar desde el principio.

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!