mocha如何递归搜索我的`src`文件夹以获取特定的文件名模式?

时间:2017-03-24 17:21:37

标签: javascript node.js npm mocha

在我的npm包中,我想模仿Meteor遵循的模式:源文件(名为client.js)在client.tests.js文件夹中有一个测试文件(名为src/) 。测试使用npm test命令运行。

我正在使用't'的使用文档。我不想在我的包测试命令中使用find

  1. 据我所知,mocha可以递归执行测试:

    mocha --recursive

  2. 我知道mocha可以使用--recursive标志在特定子文件夹中执行测试:

    mocha src --recursive

  3. 我也明白我可以指定一个通过传递*.tests.js来过滤文件的glob:

    mocha * .tests.js

  4. 但是,我想要这三个。我希望mocha只测试src文件夹中以tests.js结尾的文件,递归检查子目录。

    mocha --recursive *.tests.js
    
    // See the files?
    $ > ll ./src/app/
    total 168
    -rw-r--r--  ... client.js
    -rw-r--r--  ... client.tests.js
    
    // Option A
    $ > mocha --recursive *.tests.js
    Warning: Could not find any test files matching pattern: *.tests.js
    No test files found
    
    // Option B
    $ > mocha *.tests.js --recursive
    Warning: Could not find any test files matching pattern: *.tests.js
    No test files found.
    
    // Option C
    $ > mocha --recursive src/app/*.tests.js
    3 passing (130ms)
    3 failing
    

    所以......

    1. 为什么mocha没有获取子文件夹中的*.tests.js个文件?
    2. 如果我指定文件的完整路径,为什么它会起作用?
    3. 如何使其按预期工作?

1 个答案:

答案 0 :(得分:50)

--recursive标志用于对目录进行操作。如果你要传递一个匹配目录的glob,那么这些目录将被递归检查,但是如果你传递一个匹配文件的glob,就像你正在做的那样,那么--recursive是无效的。我建议不要将--recursive与glob一起使用,因为globs已经具有在子目录中递归查看的能力。你可以这样做:

mocha 'src/app/**/*.tests.js'

这将匹配*.tests.js中递归匹配src/app的所有文件。请注意我是如何在模式周围使用单引号的。这是引用模式,以便它按原样传递给Mocha的globbing代码。否则,你的shell可能会解释它。根据选项的不同,有些shell会将**翻译为*,但您无法获得所需的结果。