Mocha,如何忽略node_modules文件夹

11

我正在尝试创建一个测试环境,其中所有源文件都与其测试代码并排放置。这是为了方便跟踪哪些文件没有测试代码。以下是运行构建后我的目录示例。

built/api/a.js
built/api/a-test.js  
built/api/b.js
built/api/b-test.js
built/index.js
built/index-test.js
built/node_modules/...
built/package.json  
src/api/a.js
src/api/a-test.js
src/api/b.js
src/api/b-test.js
src/index.js
src/index-test.js
src/package.json
package.json
我将通过运行“npm test”来运行我的测试,下面是我的package.json内容:

我将通过运行“npm test”来运行我的测试,下面是我的package.json内容:

{ "name": "sample", 
  "scripts": {
    "build": "babel ./src -d ./built && cd built && npm install",
    "test": "mocha built/**/*-test.js"
  },
  "devDependencies": {
    "babel-cli": "^6.18.0",
    "babel-core": "^6.18.0",
    "mocha": "^3.1.2"
  }
}

我的问题是如何跳过那些在node_modules文件夹中以-test.js结尾的文件。


1
似乎Mocha默认情况下不支持此功能,但有几个不错的想法-https://github.com/mochajs/mocha/issues/1577 - tiblu
1
通常在构建步骤之前会运行测试。 - Carlos Sultana
3个回答

11

虽然有点迟(超过13个月!?),但...

Mocha不支持这个功能。你需要运用glob-fu并且稍微花点心思。在命令行中运行类似以下代码应该能解决问题:

mocha './built/{,!(node_modules)/**}/*-test.js'

全局模式{,!(node_modules)/**}的意思是:获取当前目录中的条目,以及当前目录中任何子目录中的条目(无论深度),但不包括./build/node_modules目录下的任何文件。

请注意,在OS X或Linux系统中,单引号基本上是必需的。如果未使用引号或使用双引号引用,您将得到Shell模式匹配而不是mocha使用的内部glob(),因此您可能无法获得期望的结果……除非您有一个非典型的Shell。

Windows Shell仅支持双引号…并且它没有命令行模式匹配,因此在Windows上,您可能需要将其保持为未引用状态(但请勿引用我说的话)。

更好、更平台无关的方法是将全局模式放入您的test/mocha.opts文件中,如下所示:

--require ./test/setup.js
--colors
--inline-diffs
./built/{,!(node_modules)/**}/*-test.js

加油!


为了支持Windows,您可能希望使用双引号。但是这会在POSIX shell上产生什么问题呢?只要不使用$并小心处理参数中的\,POSIX就可以正常传递它。 - binki
1
Windows的package.json代码中的一行: "test": "mocha "{,!(node_modules)/**}/*-test.js"" - FelixEnescu
2
谢谢@FelixEnescu,这对我非常有用。我只做了一个修改,就是*-test.js变成了*.test.js,但这只是你喜欢的命名约定 :) - Mark Potter

3
mocha '**/*-test.js' --ignore 'built/node_modules/**/*'

很酷,但我更喜欢尼古拉斯提供的全局模式方式,因为它教我们如何更好地使用CLI / 更独立于命令。 - user3773048

1

针对现有答案的另一种替代方案……对于那些使用mocha配置文件 (.mocharc.js) 的人,可以包含 ignore 参数:

{
  ignore: 'built/node_modules/**/*'
}

使用 mocha --config .mocharc.js built/**/*-test.js 命令进行调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接