Javascript mocha如何在我的'src'文件夹中递归搜索特定的文件名模式?

Javascript mocha如何在我的'src'文件夹中递归搜索特定的文件名模式?,javascript,node.js,npm,mocha.js,Javascript,Node.js,Npm,Mocha.js,在我的npm包中,我想模拟Meteor的模式如下:源文件(名为client.js)有一个测试文件(名为client.tests.js)位于src/文件夹中。使用npm test命令运行测试 我正在跟踪使用文档到“t”。我不想在包测试命令中使用find 我了解mocha可以递归执行测试: 摩卡——递归 我知道mocha可以使用--recursive标志在特定子文件夹中执行测试: 摩卡src——递归 我还了解,我可以通过传递*.tests.js,指定一个glob来过滤文件: 摩卡*.tests.js

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

我正在跟踪使用文档到“t”。我不想在包测试命令中使用
find

  • 我了解mocha可以递归执行测试:

    摩卡——递归

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

    摩卡src——递归

  • 我还了解,我可以通过传递
    *.tests.js
    ,指定一个glob来过滤文件:

    摩卡*.tests.js

  • 但是,我想要这三个。我希望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
    
    所以

  • 为什么mocha不在子文件夹中选择
    *.tests.js
    文件
  • 如果我指定了文件的完整路径,为什么会起作用
  • 如何使其按预期工作
  • --recursive
    标志用于对目录进行操作。如果要传递一个与目录匹配的glob,那么将递归地检查这些目录,但是如果要传递一个与文件匹配的glob,就像您正在做的那样,那么
    --recursive
    是无效的。我建议不要对glob使用
    --recursive
    ,因为glob已经具有在子目录中递归查找的功能。你可以做:

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

    这将在
    src/app
    中递归匹配所有匹配
    *.tests.js
    的文件。注意我是如何在模式周围使用单引号的。这是引用模式,以便将其按原样传递给Mocha的全局代码。否则,shell可能会解释它。根据选项的不同,一些shell会将
    **
    转换为
    *
    ,您不会得到想要的结果。

    您是否尝试过使用这个glob:
    src/app/***.tests.js
    ?我确实没有。作为我自己的参考,我在哪里可以找到这个glob语法文档?我在投票前翻了几块石头。好奇。您可以在包存储库的自述文件中找到有关glob语法的更多信息。那是摩卡咖啡用的包装。我的。地球仪。LoLzAnother有趣的警告@Louis:我如何确保
    mocha--watch
    使用上面定义的glob重新解析我的所有测试文件?当我使用
    npm test
    mocha--watch
    手动运行测试时,整个infra中的所有测试文件都是第一次运行的,但是当我在启用
    mocha--watch
    时编辑任何测试时,只有第一个测试文件被重新执行。。。我把我的摩卡旗子放在摩卡咖啡里。选择。@toszter我不使用
    mocha--watch
    。也许你对它的工作原理有点奇怪。例如,它的一个怪癖是它无法检测文件是否被添加到目录中。我使用了
    gulp
    对观看文件的支持,每次触发时,它都会从零开始启动摩卡,所以我避开了摩卡的任何怪癖
    Mocha--watch
    。你可能会对它感兴趣。它来自github上摩卡回购协议的一位所有者。我从中得到的是,维护人员不建议使用
    --watch
    。。。好的,我正在寻找一个简单的解决方案,每当我在本地开发环境中更改测试用例时,都可以重新启动我的测试,前提是设置时间不会超过我手动重新启动测试所花费的累计时间<代码>:P我将给
    一口
    一枪。@Nishant Globs将下降任意数量的子目录级别。我在回答中显示的glob将匹配
    src/app/foo.tests.js
    src/app/x/bar.tests.js
    src/app/a/b/c/d/baz.tests.js
    。人们常犯的一个错误是忘记(正如我在y回答中提到的)引用模式。它最终被它们的外壳解释,这可能有效,也可能无效。如果没有引用,
    sh
    -型shell的默认设置将破坏模式。添加单引号保存了我的下午。我有一个结构,其中测试以不同的方式嵌套在测试文件夹中,一些测试文件位于测试文件夹的根路径中,其他文件位于子文件夹中,如您在上面的注释中所述。