【问题标题】:How can mocha recursively search my `src` folder for a specific filename pattern?mocha 如何递归搜索我的`src`文件夹以查找特定的文件名模式?
【发布时间】:2017-08-17 18:01:06
【问题描述】:

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

我正在关注“t”的使用文档。我不想在我的包测试命令中使用find

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

    摩卡--递归

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

    mocha src --recursive

  3. 我也明白我可以通过传递*.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

所以……

  1. 为什么 mocha 没有提取子文件夹中的 *.tests.js 文件?
  2. 如果我指定文件的完整路径,为什么它会起作用?
  3. 如何让它按需要工作?

【问题讨论】:

  • 你试过这个 glob:src/app/**/*.tests.js?
  • 确实我没有。对于我自己的参考,我在哪里可以找到这个 glob 语法记录?在投票之前,我转动了几块石头。好奇的。谢谢。
  • 您可以在glob 包存储库的自述文件中找到有关 glob 语法的更多信息。那就是mocha使用的包。
  • 哦。我的。全球。 LoLz

标签: javascript node.js npm mocha.js


【解决方案1】:

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

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

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

【讨论】:

  • 另一个有趣的警告@Louis:我如何确保mocha --watch 使用您在上面定义的 glob 重新解析 所有 我的测试文件?当我使用npm testmocha --watch 手动运行测试时,我的基础设施中的所有测试文件都是第一次运行,但是当我在启用mocha --watch 的情况下编辑任何测试时,只有第一个测试文件会重新运行-已执行...我将 mocha 标志保存在 mocha.opts 中。
  • @toszter 我不使用mocha --watch。也许你对它的工作原理感到奇怪。例如,它的一个怪癖是它不会检测文件是否被添加到目录中。我使用gulp 对观看文件的支持,每次触发时都会从头开始摩卡,所以我避开了mocha --watch 可能有的任何怪癖。您可能对this comment 感兴趣。它来自 github 上 Mocha 存储库的一位所有者。我从中得到的是维护者不建议使用--watch
  • 多么有趣......好吧,我在市场上寻找一个简单的解决方案,每次我在本地开发环境中更改测试用例时重新启动我的测试,只要它不会花费更长的时间设置比我将花费手动重新启动测试的累积时间。 :P 我会给gulp 一个机会。
  • @Nishant Globs 将进入任意数量的子目录级别。我在答案中显示的 glob 将匹配 src/app/foo.tests.jssrc/app/x/bar.tests.jssrc/app/a/b/c/d/baz.tests.js。人们犯的一个常见错误是忘记(正如我在 y 回答中提到的)引用该模式。它最终被他们的外壳解释,这可能会也可能不会起作用。 sh-type shell 的默认设置如果没有被引用,将会搞砸模式。
  • 添加单引号节省了我的下午。我有一个结构,其中测试在 test 文件夹中以不同方式嵌套,一些测试文件位于测试文件夹的根路径中,而其他文件位于子文件夹中,如您在上面的评论中提到的。
猜你喜欢
  • 2012-09-21
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2019-05-28
  • 2012-10-28
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
相关资源
最近更新 更多