Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
Cómo hacer que Mocha falle una prueba

Tengo la siguiente prueba:

 it.only('validation should fail', function(done) { var body = { title: "dffdasfsdfsdafddfsadsa", description: "Postman Description", beginDate: now.add(3, 'd').format(), endDate: now.add(4, 'd').format() } var rules = eventsValidation.eventCreationRules(); var valMessages = eventsValidation.eventCreationMessages(); indicative .validateAll(rules, body, valMessages) .then(function(data) { console.log("SHOULD NOT GET HERE"); should.fail("should not get here"); done(); }) .catch(function(error) { console.log("SHOULD GET HERE"); console.log(error); }); done(); });

La ruta de ejecución de la prueba es correcta. Cuando tengo datos de validación, va a "NO DEBE LLEGAR AQUÍ". La prueba es realmente para asegurarse de que no lo haga. Y cuando introduzco datos que no son de validación, el código va a "DEBERÍA LLEGAR AQUÍ". Entonces las reglas de validación funcionan.

Lo que estoy tratando de hacer es asegurarme de que la prueba falle cuando tengo datos de validación incorrectos y valida. Sin embargo, cuando lo ejecuto tal como está con buenos datos, valida, ejecuta el error, pero Mocha aún lo marca como el paso. Quiero que falle si la ejecución llega a "NO DEBE LLEGAR AQUÍ".

Intenté arrojar un nuevo error ("fallo"); también sin suerte. En ambos casos, parece que también ejecuta el código en el bloque .catch.

¿Alguna sugerencia? Encontré soluciones para esto en una pregunta similar . Esta pregunta está escrita porque esas soluciones no parecen funcionar para mí.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede llamar a assert.fail :

 it("should return empty set of tags", function() { assert.fail("actual", "expected", "Error message"); });

Además, Mocha considera que la prueba ha fallado si llamas a la función done() con un parámetro.

Por ejemplo:

 it("should return empty set of tags", function(done) { done(new Error("Some error message here")); });

Aunque el primero me parece más claro.

over 4 years ago · Santiago Trujillo Denunciar

0

En ES2017 async / await world chai-as-promised no es tan necesario. Aunque los rechazos simples son un lugar donde chai-as-promised sigue siendo un poco más ordenado de usar.

Se requiere una catch si desea probar el error con más detalle.

 it.only('validation should fail', async function(){ let body = { ... } let rules = eventsValidation.eventCreationRules() let valMessages = eventsValidation.eventCreationMessages() try { await indicative.validateAll(rules, body, valMessages) } catch (error) { expect(error).to.be.instanceOf(Error) expect(error.message).to.match(/Oh no!/) return } expect.fail(null, null, 'validateAll did not reject with an error') // or throw new Error('validateAll did not reject with an error') })

async / await requiere Node.js 7.6+ o un compilador como Babel

over 4 years ago · Santiago Trujillo Denunciar

0

Use chai-as-promised , con controladores de promesa nativos de Mocha.

 var chai = require('chai').use(require('chai-as-promised')); var should = chai.should(); // This will enable .should for promise assertions

Ya no es necesario que done , simplemente devuelva la promesa.

 // Remove `done` from the line below it.only('validation should fail', function(/* done */) { var body = { title: "dffdasfsdfsdafddfsadsa", description: "Postman Description", beginDate: now.add(3, 'd').format(), endDate: now.add(4, 'd').format() } var rules = eventsValidation.eventCreationRules(); var valMessages = eventsValidation.eventCreationMessages(); // Return the promise return indicative .validateAll(rules, body, valMessages) .should.be.rejected; // The test will pass only if the promise is rejected // Remove done, we no longer need it // done(); });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda