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

189
Views
Espere hasta que prometa dentro del intervalo realizado en pruebas unitarias

(Esto parece superponerse parcialmente con mi pregunta anterior: probar la interacción con dos funciones asíncronas de intervalo )

Usando jest 27.5.1 y sinon 13.0.1, quiero probar unitariamente una función de intervalo asíncrono.

Considere este código:

 const fs = require("fs") const { exec } = require("child_process") module.exports = class MyClass { init() { setInterval(this.checkFileContent, 10) } async checkFileContent() { await new Promise((resolve) => { exec("sleep 0.4", resolve) }) const fileContent = (await fs.promises.readFile("foo.txt")).toString() console.log(fileContent) } }

y este archivo de prueba

 const MyClass = require(".") const fs = require("fs") const sinon = require("sinon") const { exec } = require("child_process") describe("MyClass", () => { let sandbox beforeAll(async () => { sandbox = sinon.createSandbox() await fs.writeFileSync("foo.txt", "fooContent") }) afterAll(async () => { await fs.unlinkSync("foo.txt") await new Promise((resolve) => { exec("sleep 0.8", resolve) }) sandbox.verifyAndRestore() }) test("should test MyClass", async () => { const clock = sandbox.useFakeTimers() const instance = new MyClass() instance.init() clock.next() await Promise.resolve() // As suggested in this answer https://stackoverflow.com/a/52196951/2710714 - but doesn't seem to help at all clock.reset() }) })

Ejecutando la prueba, siempre obtendré ENOENT: no such file or directory, open 'foo.txt' . El motivo es que await fs.unlinkSync("foo.txt") ya se ejecutó cuando se alcanzó await fs.promises.readFile("foo.txt") .

Por lo tanto, necesito asegurarme de alguna manera de que todas las promesas en la función de interval iniciada por clock.next() se resuelvan antes de que se detengan las pruebas. ¿Cómo puedo hacer eso?

Nota: en la vida real, no se trata de acceso a archivos sino de consultas a bases de datos. Y el exec("sleep ..." es, por supuesto, algo artificial para replicar operaciones de larga duración. Pero los principios deberían ser los mismos.

Editar: también probé await clock.nextAsync() - no ayudó.

about 4 years ago · Juan Pablo Isaza
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!