the*_*uls 0 unit-testing mocha.js npm package.json
我有一个应用程序,其test
命令集如下所示package.json
:
“ test”:“ mocha --require babel-core / register --watch-extensions js ** / *。test.js”,
不幸的是,我的apps文件夹结构超出了该命令允许的范围。看起来像这样:
app
??? someFolder
??? subFolder
??? subSubFolder
??? fileNeedsToBeTest.js
??? fileNeedsToBeTest.test.js
??? anotherFolder
??? anotherFileNeedsToBeTest.js
??? anotherFileNeedsToBeTest.test.js
Run Code Online (Sandbox Code Playgroud)
问题在于test
命令所在的位置,我只能测试其中的内容,anotherFolder
但我也需要someFolder/subFolder/subSubFolder
测试其中的文件。我不想指定确切的路径,因为我在整个应用程序中都有多个实例。
无论文件在文件夹中有多深,我如何修复test
命令以查找*.test.js
文件?
您的glob模式**/*.test.js
应该用双引号("..."
)引起来,但是,因为它是在JSON中指定的,因此需要使用反斜杠对它们进行转义,即\"...\"
。
您的test
命令应更改为以下内容:
"test": "mocha --require babel-core/register --watch-extensions js \"**/*.test.js\"",
Run Code Online (Sandbox Code Playgroud)
这将找到所有以.test.js
项目目录的根结尾的文件,这些文件以许多级别深入。
提示:我假设您的app
文件夹位于项目的根目录中,与package.json
and node_modules
目录位于同一级别。如果是这样的情况,那么glob模式**/*.test.js
将有可能找到后缀的文件.test.js
从node_modules
目录中-这将导致正在运行这些测试的了。为防止这种情况,您可以node_modules
按如下所示在全局模式中取反该目录:
"test": "mocha --require babel-core/register --watch-extensions js \"{,!(node_modules)/**/}*.test.js\""
Run Code Online (Sandbox Code Playgroud)
编辑:
针对以下评论:
...
{,!(node_modules)/**/}*.test.js
部分命令来自哪里?那是什么语法?
Mocha利用node-glob作为其依赖项之一。命令那部分的语法由node-glob定义(...类似于Bash用于globbing / pathname扩展的语法)。
可以在node-glob文档的Glob Primer部分中找到此语法的参考。
用于此方案的特定模式的说明:
让我们细分该模式的相关部分...
(A) Braced section
?
??????????????????????
{,!(node_modules)/**/}*.test.js
???????????????????? ??????????
? ? ? ? ?
? ? ? ? (F) filename extension
? ? ? ?
? ? ? (E) Single Globstar
? ? ?
? ? (D) Double Globstar
? ?
? (C) Negation section
?
(B) Comma-delimited
Run Code Online (Sandbox Code Playgroud)
(A)括号部分:文档将其描述为:
在解析路径零件样式之前,将支撑部分扩展为一组。括号部分以开头
{
和结尾}
,其中有任意多个逗号分隔的部分。括号部分可能包含斜杠字符,因此a{/b/c,bcd}
将扩展为a/b/c
和abcd
。
(B)以逗号分隔
该桁部分用逗号分隔符开始,因为下一个否定部分,(部分年初!
),必须出现在另一种模式-它不能是开头。这里没有提供逗号分隔符之前的初始模式。在这种情况下,它仅表示项目目录(或者更具体地讲,package.json
是存储目录/当前目录)。实际上,我们可以将模式更改为以下任意一种,我们将获得相同的结果。
{/,!(node_modules)/**/}*.test.js
^
{./,!(node_modules)/**/}*.test.js
^^
Run Code Online (Sandbox Code Playgroud)
请注意,/
或./
分别在逗号分隔符之前添加到了模式中。这与我们可以在html,javascript等中定义资产路径的方式相同。
(C)否定部分
该!
手段“不匹配这个”或“忽略此”。文档将其描述为:
!(pattern|pattern|pattern)
匹配与提供的任何模式都不匹配的任何内容。
在我们的方案中,它用于忽略node_modules
文件夹。
(D)双星
该/**/
部分与任意数量的字符匹配,包括/
。也许更简单地说,它意味着扫描所有文件和子文件夹,无论扫描到多级。
(E)单星
如果文件名的所有字符以提供的文件名扩展名(F)结尾,则将其匹配。
[F)文件扩展名
匹配所有以.test.js
文件扩展名结尾的文件。
归档时间: |
|
查看次数: |
409 次 |
最近记录: |