2012-03-22 6 views
15

QUnit tiene una aserción para probar que una función genera una excepción (QUnit/raises). ¿Es posible, utilizando QUnit, afirmar que una función no genera una excepción en?Cómo afirmar que una función no genera una excepción

que se dan cuenta de que es posible probar que al igual que en el siguiente código:

try { 
    theTest(); 
    ok(true); 
} catch (e) { 
    ok(false, "Expected to succeed"); 
} 

pero creo que debería ser posible utilizando QUnit. ¿Alguna pista?

+0

cheque esta http://stackoverflow.com/questions/10190392/asserting-that-a-function-throws-exceptions-with-qunit puede ayudar – hanane

Respuesta

15

No hay tal método en el qunit

Sin embargo, si usted acaba de escribir el siguiente código, que es mucho más corta, obtendrá el mismo resultado con beneficios additionnal

theTest(); 
ok(true, "My function does not crash"); 

1/Si el código de una prueba genera una excepción, qunit marcará la prueba como fallida.

2/Si marca la casilla de verificación "no try/catch", que será capaz de depurar, donde se lanzó la excepción, que no es el caso con su try/catch

+0

¡Por supuesto! Eso es bastante simple. Y aparentemente un poco demasiado simple para que yo lo descubra. Gracias por responder :) – anissen

+3

Resulta que esto fue demasiado simple. Si la función genera una excepción, la prueba falla * sin * un mensaje de error. Si la función no genera una excepción, la prueba se realiza como se esperaba. El mensaje en ok() - assertion nunca se usa. – anissen

+0

Tenga en cuenta que probablemente también deba agregar una llamada a expect() dentro de su función test() para que el número de aserciones también se pueda verificar de esa manera. – Krinkle

2

que tenían el mismo problema que Usted mencionó en el comentario por el cual mi prueba que no prueba Error se detendría "mal" mostrando un mensaje mal formateado Died on test #1 sin ninguna información útil.

Terminé usando una combinación de ambos; raises() para una prueba y try/catch para la otra.

que utilizan aumentos() para la prueba que realiza pruebas de que un Error se lanza, similar a este:

test("When myFunction() is called with a invalid instance Then Error is thrown", function() { 
    // Arrange 
    var testInstance = {}; 

    // Act 
    raises(function() { 
     myFunction(testInstance); 
    }, Error, "myFunction() should throw an Error"); 

    // Assert 
    // raises() does assertion 
}); 

Si lo anterior, se emite una Error todo está bien, y si no se visualiza un mensaje con formato agradable, similar a esto:

myFunction() should throw Error 
Result: No exception was thrown. 

luego utiliza try/catch para las pruebas que tienen que asegurar que no Error se lanza, similar a esto:

test("When myFunction() is called with a valid instance Then no Error is thrown", function() { 
    // Arrange 
    var testInstance = new myObject(); 
    var result; 

    // Act 
    try { 
     myFunction(testInstance); 
     result = true; 
    } catch(error) { 
     result = false; 
    } 

    // Assert 
    ok(result, "myFunction() should not throw an Error"); 
}); 

Si lo anterior no arroja Error todo está bien y si un Error se lanza se muestra un mensaje con formato agradable, similar a esto:

myFunction() should not throw an Error 
Source: ... 
+0

Lo anterior se basa en la suposición de que está probando errores lanzados personalizados administrados y su 'myFunction()' hace un 'throw throw Error intencional (...) 'dada una cierta condición inválida. No debe probar errores inesperados fuera de curso. – Nope

Cuestiones relacionadas