web-dev-qa-db-fra.com

Échec d'un test avec Chai.js

Dans JUnit, vous pouvez échouer à un test en effectuant:

fail("Exception not thrown");

Quel est le meilleur moyen d’obtenir la même chose avec Chai.js? 

19
Sionnach733

Il existe de nombreuses façons de simuler un échec - comme la assert.fail() mentionnée par @DmytroShevchenko -, mais il est généralement possible d’éviter ces béquilles et d’exprimer mieux l’intention du test, ce qui donnera des messages plus significatifs si échouer.

Par exemple, si vous vous attendez à une exception, pourquoi ne pas le dire directement:

expect( function () {
    // do stuff here which you expect to throw an exception
} ).to.throw( Error );

Comme vous pouvez le constater, lors du test des exceptions, vous devez inclure votre code dans une fonction anonyme.

Bien sûr, vous pouvez affiner le test en recherchant un type d'erreur plus spécifique, le message d'erreur attendu, etc. Voir .throw dans la Documentation Chai pour plus d'informations.

24
hashchange

Il y a assert.fail() . Vous pouvez l'utiliser comme ceci:

assert.fail(0, 1, 'Exception not thrown');
47
Dmytro Shevchenko

Je suis également tombé sur l'absence de fail(msg). Pendant un certain temps, j'ai travaillé avec ...

assert.isOk(false, 'timeOut must throw')

(L’utiliser dans des endroits qui ne devraient pas être joignables, c’est-à-dire lors du test de promesse…)

Chai est compatible avec les erreurs standard ES6, donc cela fonctionne:

throw new Error('timeOut must throw') 

… Ou, puisque s’affirmer lui-même est essentiellement le même qu’affirmer.isOK … mon préféré est:

assert(false,'timeOut must throw')

… Enfin, presque aussi court que assert.fail(….

2
Frank Nocke

J'ai fait de cette façon

const expect = require('chai').expect;
const exists = true;
expect(!exists).to.throw('Unknown request type');
0
Hemadri Dasari