Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

255
Visualizações
La solicitud GET básica de Mocha Chai no registra los pases y falla correctamente

Soy bastante nuevo en mocha.js, así que trato de obtener algo bastante básico y confiable que funcione con un ejemplo mínimo.

Estoy tratando de hacer una solicitud GET a una API JSON de ejemplo y ejecutar 3 pruebas en ella, todas deberían tener resultados diferentes, pero todas obtienen resultados diferentes a los esperados.

Además, estoy tratando de capturar y contar/informar sobre los errores que ocurren a través de las pruebas para generar detalles after() que se ejecutan todas las pruebas para no saturar la interfaz de usuario.

Para las 3 pruebas que tengo, solo 1 debería pasar. El problema es que si incluyo una llamada .finally() entonces todas pasan, si elimino la llamada .finally() y solo tengo la llamada .catch() entonces todas fallan. No estoy seguro de lo que me estoy perdiendo.

 let errors = [] // After All output error details after((done) => { console.log("Total Errors: " + errors.length) // console.log(errors) done() }) // Example Test Suite describe("Example Test Suite", () => { it("#1 Should Pass on expect 200", (done) => { request("https://jsonplaceholder.typicode.com/") .get("todos/1") .expect(200) .catch(function (err) { errors.push(err) done(err) }) .finally(done()) }) it("#2 Should Fail on wrong content type", (done) => { request("https://jsonplaceholder.typicode.com/") .get("todos/1") .expect("Content-Type", "FAIL") .catch(function (err) { errors.push(err) done(err) }) .finally(done()) }) it("#3 Should Fail on contain.string()", (done) => { request("https://jsonplaceholder.typicode.com/") .get("todos/1") .then(function (err, res) { if (err) {done(err)} else { try { expect(res.text).to.contain.string("ThisShouldFail"); } catch(e) { errors.push({error: e, response: res}) done(err) } finally { done() } } }).catch(function (err) { errors.push(err) done(err) }) .finally(done()) }) })
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

He encontrado dos problemas con las pruebas proporcionadas

  1. .finally(done()) finaliza la prueba como exitosa inmediatamente ya que .finally espera una devolución de llamada y en su lugar se llama a done , .finally(done) o .finally(() => done()) podrían funcionar como usted pretendía a ellos.

  2. interceptar los errores a través de try/catch es una práctica realmente mala y su implementación se tragará los errores potenciales mientras marca la prueba como aprobada, aunque falló, es mucho mejor usar el contexto de prueba de mocha porque este es un gancho afterEach, para ejemplo:

 const errors = []; afterEach(function () { if (this.currentTest.state === "failed") { errors.push(this.currentTest.title) } });

Tampoco es necesario llamar terminado cuando se trabaja con promesas en moca. Una promesa puede ser simplemente devuelta y mocha pasará la prueba siempre y cuando la promesa se resuelva, falle de lo contrario (si no se detecta el error).

 it("...", () => { return request(...).get(...).then(...) }

o usando async/await, que devuelve una promesa implícitamente

 it("...", async () => { const result = await request(...).get(...) // Do assertions on result ... // No need to return anything here }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda