Unit testing 在package.json文件夹中的文件夹上运行测试
我有一个应用程序,在Unit testing 在package.json文件夹中的文件夹上运行测试,unit-testing,npm,mocha.js,package.json,Unit Testing,Npm,Mocha.js,Package.json,我有一个应用程序,在package.json中设置了test命令,如下所示: “测试”:“摩卡——需要巴别塔核心/寄存器——手表扩展js**/*.test.js” 不幸的是,我的应用程序文件夹结构比命令允许的更深。它看起来像这样: app └── someFolder └── subFolder └── subSubFolder └── fileNeedsToBeTest.js └── fileNeedsToBeTest.t
package.json
中设置了test
命令,如下所示:
“测试”:“摩卡——需要巴别塔核心/寄存器——手表扩展js**/*.test.js”
不幸的是,我的应用程序文件夹结构比命令允许的更深。它看起来像这样:
app
└── someFolder
└── subFolder
└── subSubFolder
└── fileNeedsToBeTest.js
└── fileNeedsToBeTest.test.js
└── anotherFolder
└── anotherFileNeedsToBeTest.js
└── anotherFileNeedsToBeTest.test.js
问题是,由于test
命令有效,我只能测试另一个文件夹中的文件,但我还需要测试某个文件夹/子文件夹/子文件夹中的文件。我不想指定确切的路径,因为我在应用程序中有多个这样的实例
我如何修复我的test
命令以能够找到*.test.js
文件,无论它们在文件夹中有多深?您的glob模式***.test.js
应该用双引号(“…”
)包装,但是,因为它是在JSON中指定的,它们需要用反斜杠转义,即\“…\”
您的test
命令应更改为以下内容:
“测试”:“摩卡——需要巴别塔核心/寄存器——观看扩展js\”***.test.js\”,
这将在项目目录的根目录中找到所有以.test.js
结尾的文件,这些文件有很多层
提示:我假设您是应用程序
文件夹存在于项目的根目录中,与您的包.json
和节点模块
目录处于同一级别。如果是这种情况,那么glob模式***.test.js
可能会从node\u modules
目录-这将导致这些测试也在运行。为了防止出现这种情况,您可以在glob模式中否定node\u modules
目录,如下所示:
“测试”:“摩卡——需要巴别塔核心/寄存器——观看扩展js\”{,!(节点模块)/**/}*.test.js\”
编辑:
针对以下评论:
…命令的{,!(node_modules)/**/}*.test.js
部分来自哪里?这是什么语法
作为它的一部分使用。该命令部分的语法由节点glob定义(…类似于Bash用于globbing/pathname扩展的语法)
此语法的参考可在node glob文档的一节中找到
此场景使用的特定模式说明:
让我们分析一下这个模式的相关部分
(A)支撑截面
│
┌─────────┴──────────┐
{,!(node_modules)/**/}*.test.js
│└──────┬──────┘└─┬┘ │└───┬───┘
│ │ │ │ │
│ │ │ │ (F) 文件扩展名
│ │ │ │
│ │ │ (E) 单星
│ │ │
│ │ (D) 双星
│ │
│ (C) 否定部分
│
(B) 逗号分隔
- (A)括号部分:文档将其描述为:
在分析路径部件模式之前,大括号部分将展开为一个集合。大括号部分以
{
开始,以}
结束,其中包含任意数量的逗号分隔部分。大括号部分可能包含斜杠字符,因此a{/b/c,bcd}
将展开为a/b/c
和abcd
- (B)逗号分隔的
大括号部分以逗号分隔符开头,因为下一个否定部分(以
!
开头的部分)必须在另一个模式之后-它不能在开头。此处未提供逗号分隔符之前的初始模式;在这种情况下,它仅表示项目目录(或者更具体地说,是存储package.json
的同一个/current目录)
{/,!(node_modules)/**/}*.test.js
^
{./,!(节点模块)/**/}*.test.js
^^
注意,/
或/
分别添加到逗号分隔符之前的模式中。这与我们在html、javascript等中定义资产路径的方式相同
- (C)否定部分
!
表示“不匹配此项”或“忽略此项”。文档将其描述为:
!(pattern | pattern | pattern)
匹配任何与提供的任何模式不匹配的内容
在我们的场景中,它用于忽略node\u modules
文件夹
- (D)双星
/**/
部分匹配任意数量的字符,包括/
。可能更简单的意思是扫描所有文件和子文件夹,无论其深度有多深
- (E)单一全球之星
匹配文件名的所有字符(如果/当它们以提供的文件扩展名(F)结尾)
- (F)文件扩展名
匹配以
.test.js
文件扩展名结尾的所有文件
您的glob模式
***.test.js
应该用双引号(“…”
)括起来,但是,因为它是在JSON中指定的,所以需要用反斜杠转义,即\“…”
您的test
命令应更改为以下内容:
“测试”:“摩卡——需要巴别塔核心/寄存器——观看扩展js\”***.test.js\”,
这将在项目目录的根目录中找到所有以.test.js
结尾的文件,这些文件有很多层
提示:我假设