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
      结尾的文件,这些文件有很多层

      提示:我假设