2017-08-18 1 views
0

Je maintiens actuellement un document de tests comme une feuille de calcul - donc j'ai 3 colonnes:Node - passer par le dossier des fichiers JS et extraire certains bits

  • Nom du fichier
  • texte à partir d'un bloc it - son un test de moka it('does this thing', function(){ ... })
  • Une description - que j'écris.

Cependant, je n'aime pas l'idée que cela prend du temps à maintenir.

Est-il possible d'automatiser cela, je pense qu'un paquet npm existe. Donc, cela se déroulerait à travers un dossier, obtenir les noms de fichiers et se pencher sur chaque JS pour recueillir des informations après une chaîne de regex défini. Par exemple rechercher tout texte après //DESCRIPTION et it( - comme ceci:

//DESCRIPTION: Some text here 
it('does this thing', function(){ ... }) 
+0

Questions nous demandant de recommander ou de trouver un livre, outil, bibliothèque de logiciels, tutoriel ou autre hors site Les ressources sont hors-sujet pour Stack Overflow car elles ont tendance à attirer les réponses et les spams. Décrivez plutôt le problème et ce qui a été fait jusqu'à présent pour le résoudre. – jfriend00

Répondre

1

Utilisez esprima pour obtenir le AST, filtrer les blocs de test que vous souhaitez, générer du code source par escodegen

Voici le code:

const fs = require('fs') 
const path = require('path') 
const esprima = require('esprima') 
const escodegen = require('escodegen') 


function walkSync (dir) { 
    return fs.statSync(dir).isDirectory() 
    ? Array.prototype.concat(...fs.readdirSync(dir).map(f => walkSync(path.join(dir, f)))) 
    : dir 
} 

const result = walkSync('./test').map(path => { 
    const ast = esprima.parse(fs.readFileSync(path, 'utf8')) 
    ast.body = ast.body.filter(elem => { 
    return elem.type === 'ExpressionStatement' 
     && elem.expression && elem.expression.callee 
     && elem.expression.callee.name === 'it' 
    }) 
    const code = escodegen.generate(ast) 
    return { 
    path, 
    code 
    } 
}) 

console.log(result) 

Quel regard la structure du dossier de test comme: enter image description here

Quel regard cas test comme: enter image description here

Quel est le résultat de l'exécution ressembler à: enter image description here