从package.json对文件夹中的文件夹运行测试

时间:2018-05-09 14:26:22

标签: unit-testing npm mocha package.json

我在test中有一个package.json命令设置的应用程序如下:

  

"测试":" mocha - 需要babel-core / register --watch-extensions js ** / * .test.js",

不幸的是,我的apps文件夹结构比那个命令允许我更深入。它看起来像这样:

app
└── someFolder
    └── subFolder
        └── subSubFolder
            └── fileNeedsToBeTest.js
            └── fileNeedsToBeTest.test.js
└── anotherFolder
    └── anotherFileNeedsToBeTest.js
    └── anotherFileNeedsToBeTest.test.js

问题在于test命令,我只能测试anotherFolder中的内容,但我还需要测试someFolder/subFolder/subSubFolder中的文件。我不想指定确切的路径,因为我在应用程序中发生了多个此类实例。

我怎样才能修复test命令,无论文件夹中的文件有多深,都能找到*.test.js个文件?

1 个答案:

答案 0 :(得分:4)

您的glob模式**/*.test.js应该用双引号("...")包装,但是,因为它是在JSON中指定的,所以需要使用反斜杠进行转义,即\"...\"

您的test命令应更改为以下内容:

"test": "mocha --require babel-core/register --watch-extensions js \"**/*.test.js\"",

这将在项目目录的根目录中找到所有以.test.js结尾的文件。

提示:我假设您的app文件夹存在于项目的根目录中,与package.json和{{1}处于同一级别} 目录。如果是这种情况,则glob模式node_modules可能会从**/*.test.js目录中找到以.test.js结尾的任何文件 - 这将导致这些测试也被运行。为了防止这种情况,您可以否定glob模式中的node_modules目录,如下所示:

node_modules

修改

回应以下评论:

  

... "test": "mocha --require babel-core/register --watch-extensions js \"{,!(node_modules)/**/}*.test.js\"" 命令的一部分来自哪里?这是什么语法?

Mocha使用node-glob作为其中一个dependencies。该部分命令的语法由node-glob定义(...类似于Bash用于globbing /路径名扩展的语法)。

可以在node-glob文档的Glob Primer部分找到此语法的参考。

用于此方案的特定模式的说明:

让我们分解那种模式的相关部分......

{,!(node_modules)/**/}*.test.js
  • (A)支持部分:文档将其描述为:

      

    在解析路径部件模式之前,将支撑部分扩展为一个集合。支撑部分以 (A) Braced section │ ┌─────────┴──────────┐ {,!(node_modules)/**/}*.test.js │└──────┬──────┘└─┬┘ │└───┬───┘ │ │ │ │ │ │ │ │ │ (F) filename extension │ │ │ │ │ │ │ (E) Single Globstar │ │ │ │ │ (D) Double Globstar │ │ │ (C) Negation section │ (B) Comma-delimited 开头,以{结尾,其中包含任意数量的逗号分隔部分。支撑部分可能包含斜杠字符,因此}会扩展为a{/b/c,bcd}a/b/c

  • (B)以逗号分隔

    支撑部分以逗号分隔符开头,因为下一个否定部分(以abcd开头的部分)必须在另一个模式之后 - 它不能在一开始。这里没有提供逗号分隔符之前的初始模式;在这种情况下,它只是暗示项目目录(或者更具体地说是存储!的同一/当前目录)。我们实际上可以将模式更改为以下任一项,我们会得到相同的结果。

    package.json

    注意,在逗号分隔符之前分别将{/,!(node_modules)/**/}*.test.js ^ {./,!(node_modules)/**/}*.test.js ^^ /添加到模式中。这与我们可能在html,javascript等中定义资产路径的方式相同。

  • (C)否定部分

    ./表示“与此匹配”“忽略此”。文档将其描述为:

      

    !匹配任何与所提供的任何模式都不匹配的内容。

    在我们的场景中,它用于忽略!(pattern|pattern|pattern)文件夹。

  • (D)Double globstar

    node_modules部分匹配任意数量的字符,包括/**/。也许更简单的是,它意味着扫描所有文件和子文件夹,无论多深层次。

  • (E)Single Globstar

    匹配文件名的所有字符,如果/当它们以提供的文件扩展名结束时(F)。

  • (F)文件扩展名

    匹配以/文件扩展名结尾的所有文件。