with unit not node method javascript testing mocha chai

javascript - unit - Probando errores lanzados en Mocha



typeerror is not a function node js (3)

Esta pregunta ya tiene una respuesta aquí:

Espero encontrar algo de ayuda con este problema. Estoy intentando escribir pruebas para una aplicación que estoy escribiendo. He destilado el problema en el siguiente código de muestra. Quiero probar que se produjo un error. Estoy usando Testacular como un corredor de prueba con mocha como marco y chai como la biblioteca de aserciones. Las pruebas se ejecutan, pero la prueba falla porque se produjo un error. ¡Cualquier ayuda es muy apreciada!

function iThrowError() { throw new Error("Error thrown"); } var assert = chai.assert, expect = chai.expect; describe(''The app'', function() { describe(''this feature'', function() { it("is a function", function(){ assert.throw(iThrowError(), Error, "Error thrown"); }); }); });


Agregando a la respuesta superior , si necesita invocar su función como parte de la prueba (es decir, su función solo arrojará un error si se pasan ciertos parámetros), puede ajustar su llamada de función en una función anónima o, en ES6 +, puede pasar su función en una expresión de función de flecha.

// Function invoked with parameter. // TEST FAILS. DO NOT USE. assert.throws(iThrowError(badParam), Error, "Error thrown"); // WRONG! // Function invoked with parameter; wrapped in anonymous function for test. // TEST PASSES. assert.throws(function () { iThrowError(badParam) }, Error, "Error thrown"); // Function invoked with parameter, passed as predicate of ES6 arrow function. // TEST PASSES. assert.throws(() => iThrowError(badParam), Error, "Error thrown");

Y, por el bien de la minuciosidad, aquí hay una versión más literal:

// Explicit throw statement as parameter. (This isn''t even valid JavaScript.) // TEST SUITE WILL FAIL TO LOAD. DO NOT USE, EVER. assert.throws(throw new Error("Error thrown"), Error, "Error thrown"); // VERY WRONG! // Explicit throw statement wrapped in anonymous function. // TEST PASSES. assert.throws(function () { throw new Error("Error thrown") }, Error, "Error thrown"); // ES6 function. (You still need the brackets around the throw statement.) // TEST PASSES. assert.throws(() => { throw new Error("Error thrown") }, Error, "Error thrown");


No está pasando su función para assert.throws() la manera correcta.

La función assert.throws() espera una función como primer parámetro. En su código, está invocando iThrowError y pasando su valor de retorno al llamar a assert.throws() .

Básicamente, cambiando esto:

assert.throws(iThrowError(), Error, "Error thrown");

a esto:

assert.throws(iThrowError, Error, "Error thrown");

debería resolver tu problema


Vi que pudo resolver su problema pero no pudo verificar si había un error específico. Para hacerlo usando la sintaxis expect / should de Chai, puede usar los parámetros de las diferentes firmas de throw() :

@param{ ErrorConstructor } constructor @param{ String | RegExp } expectederror message @param{ String } message _optional_

En su ejemplo, debería poder usar cualquiera de los siguientes:

expect(iThrowError).to.throw(/Error thrown/); expect(iThrowError).to.throw(Error, /Error thrown/); expect(iThrowError).to.throw(new Error(''Error thrown''));

Y (nuevamente, a partir de la documentación de chai), puede filtrar otros mensajes de error usando:

expect(iThrowError).to.throw(Error).and.not.throw(/Another Error thrown/);

¡Espero que esto ayude!