2017-08-14 1 views
4

J'ai un test de mocha en utilisant chaï de s'attendre:Comment fournir chai s'attendre à un message d'erreur personnalisé pour le test de l'unité de moka?

it("should parse sails out of cache file", async() => { 
    const sailExtractor = new Extractor(); 
    const result = await sailExtractor.extract("test.xml"); 

    try { 
     expect(result.length).to.be.greaterThan(0); 
     const withMandatoryFlight = result.filter((cruises) => { 
      return cruises.hasMandatoryFlight === true; 
     }); 
     expect(withMandatoryFlight.length).to.be.greaterThan(0); 
     const cruiseOnly = result.filter((cruises) => { 
      return cruises.hasMandatoryFlight === false; 
     }); 

     expect(cruiseOnly.length).to.be.greaterThan(0); 

     return Promise.resolve(); 
    } catch (e) { 
     return Promise.reject(e); 
    } 
} 

Maintenant, si l'on to.be.greaterThan(0) attente échoue, la sortie d'erreur sur mocha n'est pas dev-friendly:

AssertionError: expected 0 to be above 0 
     at Assertion.assertAbove (node_modules/chai/lib/chai/core/assertions.js:571:12) 
     at Assertion.ctx.(anonymous function) [as greaterThan] (node_modules/chai/lib/chai/utils/addMethod.js:41:25) 
     at _callee2$ (tests/unit/operator/croisiEurope/CroisXmlExtractorTest.js:409:61) 
     at tryCatch (node_modules/regenerator-runtime/runtime.js:65:40) 
     at Generator.invoke [as _invoke] (node_modules/regenerator-runtime/runtime.js:303:22) 
     at Generator.prototype.(anonymous function) [as next] (node_modules/regenerator-runtime/runtime.js:117:21) 
     at fulfilled (node_modules/tslib/tslib.js:93:62) 
     at <anonymous> 
     at process._tickDomainCallback (internal/process/next_tick.js:228:7) 

Je voudrais le remplacer par quelque chose de plus humain. Est-il possible de dire à chai d'utiliser un message d'erreur de personnalisation?

Je veux être en mesure de l'utiliser comme cette pseudo-code:

expect(result.length) 
     .to.be.greaterThan(0) 
     .withErrorMessage("It should parse at least one sail out of the flatfile, but result is empty"); 

Et puis l'échec erreur de mocha doit imprimer:

AssertionError: It should parse at least one sail out of the flatfile, but result is empty 

Répondre

3

Chaque méthode expect accepte un paramètre optionnel message:

expect(1).to.be.above(2, 'nooo why fail??'); 
expect(1, 'nooo why fail??').to.be.above(2); 

Ainsi, dans votre cas, il devrait être:

expect(result.length) 
    .to.be.greaterThan(0, "It should parse at least one sail out of the flatfile, but result is empty"); 
+0

OP utilise 'chai', mais il semble que votre réponse s'applique à cette bibliothèque aussi bien. Alternativelty, vous pouvez utiliser 'expect (result.length, 'It should parse ...'). To.be.greaterThan (0)' – robertklep

+0

Oui, vous avez raison, les deux variantes sont correctes. – alexmac

+1

Sidenote: Comme j'utilise un script, j'aurais pu le trouver moi-même en sautant dans la méthode 'greaterThan', car sa frappe est déclarée en tant qu'interface [' NumberComparer'] (https://github.com/DefinitelyTyped/ DefinitelyTyped/blob/9030f8f40fb13aef2242c2d011d98a7a03044083/types/chai/index.d.ts # L157), et le paramètre de message optionnel est affiché. – k0pernikus

0

Si vous utilisez should pour vos affirmations, vous pouvez passer une chaîne à la fonction de test qui sera écrite si la condition échoue. Par exemple:

result.length.should.be.above(0, "It should parse at least one sail out of the flatfile, but result is empty"); 

Je ne sais pas si cela est possible avec expect. L'API ne semble pas le mentionner.