Maison  >  Article  >  interface Web  >  Introduction détaillée au framework de test NodeJS moka

Introduction détaillée au framework de test NodeJS moka

黄舟
黄舟original
2017-03-28 14:21:301706parcourir

Cet article présente brièvement l'installation et l'utilisation simple de mocha, le framework de test le plus couramment utilisé dans NodeJS. Il prend en charge l'exécution de tests de code Javascript directement sur le navigateur. Il est recommandé ici à tout le monde

.

Le framework de test le plus couramment utilisé dans NodeJS est probablement moka. Il prend en charge une variété de bibliothèques d'assertion de nœuds, prend en charge les tests asynchrones et synchrones, prend en charge plusieurs façons d'exporter les résultats et prend également en charge l'exécution de tests de code Javascript directement sur le navigateur.

La plupart des exemples de cet article sont dérivés des exemples présents sur le site officiel, et certains exemples ont été modifiés en fonction des besoins ou de mes propres sentiments. Pour plus d'introduction, veuillez consulter le site officiel : Mocha sur Github

Installation :

Lorsque vous installez avec succès nodejs v0.10 et npm, exécutez la commande suivante.

# npm install -g mocha

p.s. Pour Ubuntu, veuillez noter que la version de nodejs dans la source apt sera plus ancienne et que certains modules ne seront pas pris en charge. Veuillez installer le code source à partir du site officiel de nodejs. site web.

Premier pas vers Moka :

Ce qui suit est l'exemple de moka le plus simple :

var assert = require("assert");
describe('Array', function(){
 describe('#indexOf()', function(){
  it('should return -1 when the value is not present', function(){
     assert.equal(-1, [1,2,3].indexOf(5));
   assert.equal(-1, [1,2,3].indexOf(0));
 })
 })
});

describe (moduleName, testDetails) Comme on peut le voir ci-dessus code , décrire peut être imbriqué. Par exemple, les deux descriptions imbriquées dans le code ci-dessus peuvent être comprises comme le désir du testeur de tester le sous-module #indexOf() sous le module Array. module_name peut être choisi avec désinvolture, la clé est de le rendre compréhensible.
it (info, function) L'instruction de test spécifique sera placée dans sa fonction de rappel De manière générale, infostring écrira une brève phrase du texte correct attendu. description. Lorsque le test dans le bloc it échoue, la console imprimera les informations détaillées. Généralement, la sortie commence à partir du nom_module de la description la plus externe (peut être comprise comme le long du chemin ou d'une chaîne récursive ou d'une chaîne de rappel), et génère enfin des informations, indiquant que le contenu des informations attendu n'a pas été atteint. Et cela correspond à une assertion de cas de test réel
assert.equal (exp1, exp2) pour déterminer si le résultat de exp1 est égal à exp2. Le jugement d'égalité adopté ici est == au lieu de ===. Autrement dit, assert.equal(1, '1') est considéré comme vrai. Il s'agit simplement d'une forme d'assertion de assert.js dans nodejs, le Should.js également couramment utilisé sera mentionné ci-dessous.
Si exp1 et exp2 sont toutes deux des chaînes et qu'une erreur se produit lors de la comparaison des chaînes, la console utilisera la couleur pour marquer les différentes parties.

Asynchrone

Le code de la première étape est évidemment du code synchrone, alors que devons-nous faire avec du code asynchrone ? C'est très simple. Ajoutez done() à votre fonction de rappel la plus profonde pour indiquer la fin.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
 })
})

done ()0c6dc11e160d3b678d68754cc175188a Selon les habitudes de programmation en cascade, le nom done signifie le point le plus profond de votre rappel, c'est-à-dire la fin de l'écriture des fonctions de rappel imbriquées. Mais pour la chaîne de rappel, done signifie en fait dire à mocha de commencer les tests à partir d'ici et de rappeler couche par couche.

L'exemple de code ci-dessus est destiné à la réussite du test. Nous essayons de remplacer test.ls par le test.as inexistant. L'emplacement spécifique de l'erreur sera renvoyé.

Il peut y avoir une question ici. Si j'ai deux fonctions asynchrones (deux chaînes de rappel fourchues), où dois-je ajouter done() ? En fait, il ne devrait pas y avoir deux fonctions à tester dans une seule pour le moment. En fait, done ne peut être appelé qu'une seule fois dans une seule fois. Lorsque vous appelez done plusieurs fois, mocha générera une erreur. Cela devrait donc ressembler à ceci :

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
   fs.readFile('test.js', function(err){
  if (err) throw err;
  done();
  });
 })
 })
})

En attente

C'est-à-dire, omettre les détails du test et conserver uniquement le corps de la fonction. Il s'applique généralement aux situations telles que la personne responsable du test du framework a écrit le framework et a laissé les membres de l'équipe mettre en œuvre les détails, ou les détails du test n'ont pas été entièrement mis en œuvre correctement et doivent être commentés en premier pour éviter d'affecter la situation globale du test. . Dans ce cas, moka passera par défaut à la réussite du test.
Cela fonctionne un peu comme le pass de Python.

describe('Array', function(){
 describe('#indexOf()', function(){
  it('should return -1 when the value is not present', function(){
 })
 })
});

Exclusif && Inclus

est en fait facile à comprendre et correspond respectivement aux fonctions seule et ignorer.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it.skip('should read test.ls without error', function(done){
   fs.readFile('test.ls', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
 })
 })
})

Le code ci-dessus n'aura qu'un seul test terminé, seul le seul sera exécuté et l'autre sera ignoré. Il ne peut y en avoir qu'un seul dans chaque fonction. Si it.skip, alors ce cas sera ignoré.

Il n'y a aucune signification pratique à partager uniquement et à sauter, car la fonction de uniquement bloquera le saut.

fs = require('fs');
describe('File', function(){
 describe('#readFile()', function(){
   it.skip('should read test.ls without error', function(done){
   fs.readFile('test.as', function(err){
  if (err) throw err;
  done();
  });
 })
   it('should read test.js without error', function(done){
 })
 })
})

Bien que test.as n'existe pas dans le code ci-dessus, le test terminé sera toujours affiché en raison de son saut.

Avant et& Après

avant et après sont souvent utilisés dans les tests unitaires. mocha fournit également beforeEach() et afterEach().
Ici, exprimé en livescript pour faciliter la lecture, !-> peut être compris comme function(){}. Il n'est pas nécessaire de lire attentivement les détails, il suffit de comprendre comment utiliser ces fonctions via le framework.

require! assert
require! fs
can = it


describe 'Array', !->
 beforeEach !->
 console.log 'beforeEach Array'

 before !->
 console.log 'before Array'
 
 before !->
 console.log 'before Array second time'

 after !->
 console.log 'after Array'

 describe '#indexOf()', !->
 can 'should return -1 when the value is not present', !->
  assert.equal -1, [1,2,3].indexOf 0
 can 'should return 1 when the value is not present', !->

 describe 'File', !->

 beforeEach !->
  console.log 'beforeEach file test!'

 afterEach !->
  console.log 'afterEach File test!'

 describe '#readFile()', !->
  can 'should read test.ls without error', !(done)->
  fs.readFile 'test.ls', !(err)->
   if err
   throw err
   done!
  can 'should read test.js without error', !(done)->
  fs.readFile 'test.js', !(err)->
   if err
   throw err
   done!

Cela peut être vu d'après les résultats (l'utilisation de after est la même qu'avant),

beforeEach prendra effet sur tous les sous-cas sous la description actuelle.
Il n’y a aucune exigence de commande particulière pour les codes avant et après.
Il peut y avoir plusieurs avant sous la même description, et l'ordre d'exécution est le même que l'ordre du code.
L'ordre d'exécution sous la même description est before, beforeEach, afterEach, after
Lorsqu'il y a plusieurs avant, l'ordre d'exécution commence à partir de l'avant de la description la plus externe, et le reste est le même.

Développement piloté par les tests (TDD)

mocha默认的模式是Behavior Driven Develop (BDD),要想执行TDD的test的时候需要加上参数,如

mocha -u tdd test.js

前文所讲的describe, it, before, after等都属于BDD的范畴,对于TDD,我们用suite, test, setup, teardown。样例代码如下:

suite 'Array', !->
 setup !->
 console.log 'setup'

 teardown !->
 console.log 'teardown'

 suite '#indexOf()', !->
 test 'should return -1 when not present', !->
  assert.equal -1, [1,2,3].indexOf 4

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn