javascript - Node - 遍历 JS 文件的文件夹并提取某些位

标签 javascript node.js documentation

我目前正在以电子表格形式维护一份测试文档 - 所以我有 3 列:

  • 文件名
  • 来自 it 的文本 block - 这是摩卡测试 it('does this thing', function(){ ... })
  • 描述 - 我正在写。

但是我不喜欢这个想法,因为维护起来很耗时。

是否可以自动执行此操作,我认为存在一些 npm 包。因此,这将运行一个文件夹,获取文件名并查看每个 JS 以在某些定义的字符串正则表达式之后收集信息。例如,查找 //DESCRIPTION 之后的任何文本和it( - 像这样:

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

最佳答案

使用esprima获取AST,过滤出想要的测试 block ,通过escodegen生成源代码

这是代码:

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)

测试文件夹结构如下: enter image description here

测试用例是什么样的: enter image description here

执行结果如下: enter image description here

关于javascript - Node - 遍历 JS 文件的文件夹并提取某些位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45748754/

相关文章:

javascript - 如何在不循环的情况下向Javascript数组中的每个对象添加字段?

node.js - 如何从没有格式的FFmpeg获取标准输出?

Python:将结果和数字记录到tex文档中

c# - C#/.NET 中方法的自动文档异常

javascript - 如何使用 JSDoc 记录不一致的返回?

javascript - 动态创建的列表项上的鼠标悬停功能

javascript - 如何使用 Javascript 获取多个输入字段的值

mysql - 我可以在 Sequelize 中定义 User 和 Server 模型之间的多对多和一对多关系吗?

javascript - React-boilerplate 将 sagas 注入(inject)路由

javascript - AngularJS ng-repeat - jquery Datepicker 在 ng-repeat 中不工作