运行mocha排除路径

Ale*_* 75 15 mocha.js npm

我有这个(在gulpfile.js中):

var gulp = require("gulp");
var mocha = require("gulp-mocha");
gulp.task("test", function() {
    gulp
        .src(["./**/*_test.js", "!./node_modules/**/*.js"]);
});
Run Code Online (Sandbox Code Playgroud)

它的工作原理.

我想从mocha命令复制相同的行为,不包括"node_modules"文件夹,运行npm test(在package.json中):

"scripts": {
    "test": "mocha **\\*_test.js !./node_modules/**/*.js*",
}
Run Code Online (Sandbox Code Playgroud)

它不起作用.

我正在使用Windows.

有什么建议吗?

d51*_*512 19

我能够使用参数中的globbing模式来解决这个问题mocha.像你一样,我不想把我的所有测试放在一个tests文件夹下.我希望它们与他们测试的类位于同一目录中.我的文件结构如下所示:

project
|- lib
   |- class1.js
   |- class1.test.js
|- node_modules
   |- lots of stuff...
Run Code Online (Sandbox Code Playgroud)

project文件夹运行这个为我工作:

mocha './{,!(node_modules)/**}/*.test.js'
Run Code Online (Sandbox Code Playgroud)

哪个匹配*.test.js树中的任何文件,所以它的路径根本不长./node_modules/.

这是一个用于测试我认为有用的glob模式的在线工具.

  • 如果`node_modules`可能在路径中的任何地方怎么办? (3认同)
  • RIP 在线工具。 (2认同)

Man*_*ore 11

对于Windows用户 此脚本将完美运行

 "test": "mocha \"./{,!(node_modules)/**/}*.test.js\"",
Run Code Online (Sandbox Code Playgroud)

我希望这将有所帮助。

干杯!


bau*_*048 5

我不是摩卡或蚂蚁风格模式的大师,但也许不可能在mocha命令行中排除特定路径.

您可以将所有测试文件放在测试文件夹下,并将package.json设置为:

"scripts": {
    "test": "mocha ./test/**/*_test.js"
}
Run Code Online (Sandbox Code Playgroud)

您还可以提供多个起始文件夹:

"scripts": {
    "test": "mocha ./test/**/*_test.js ./another_test_folder/**/*_test.js"
}
Run Code Online (Sandbox Code Playgroud)

  • 不,我不想把我的所有测试文件放在特定的文件夹下.我决定在要测试的文件附近放一个*_test.js文件.我有很多包含测试文件的文件夹.问题是我添加了Unit.js包并且它对测试文件(*_test.js)使用了相同的命名约定,所以,现在,我的mocha运行捕获了这个测试.我也不想改变我的命名惯例.谢谢你的建议,这很好. (3认同)
  • 如果问题是:如何重新安排我的整个项目结构以仅运行某些测试,这将是正确的答案? (3认同)

lfe*_*445 5

您可以通过传递opts排除摩卡中的文件

mocha -h|grep -i exclude
    --exclude <file>                        a file or glob pattern to ignore (default: )

mocha --exclude **/*-.jest.js
Run Code Online (Sandbox Code Playgroud)

此外,您还可以创建一个test/mocha.opts文件并将其添加到此处

# test/mocha.opts
--exclude **/*-test.jest.js
--require ./test/setup.js
Run Code Online (Sandbox Code Playgroud)

如果要排除特定文件类型,可以执行以下操作

// test/setup.js
require.extensions['.graphql'] = function() {
  return null
}
Run Code Online (Sandbox Code Playgroud)

当使用mocha无法理解的模块加载器(例如webpack)处理扩展时,这很有用。


Val*_*Shi 5

截至 2019 年,在 Node 下配置 Mocha 的现代方法是通过项目根目录中的配置文件(例如通过.mocharc.js)。

.mocharc.js这是那个的例子

  • 重新定义默认测试目录(speckey)和
  • exclude从整个套件( key)中排除示例(或者可以是任何实验测试) 。
module.exports = {
    'spec': 'src/front/js/tests/**/*.spec.js',
    'exclude': 'src/front/js/tests/examples/*.spec.js',
    'reporter': 'dot'
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,配置中可以使用更多选项。在某种程度上,它们只是Mocha CLI 选项的复制品。只需查找您喜欢的内容并尝试在其中使用.mocharc.js使用驼峰式命名法来表示包含破折号的 CLI 选项)。或者查看配置示例


Ale*_* 75 3

正如 @thebearingedge 的评论中所建议的,最后我将所有源文件(以及相关测试文件)放在一个新的“src”目录中
\n通过这种方式,我可以使用默认排除“node_modules”文件夹的路径定义测试的根。

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src  \n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fileA.js  \n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fileA_test.js  \n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fileB.js  \n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fileB_test.js  \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 node_modules\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我必须更新 package.json、gulpfile.js 以及我用作实用程序的一些批处理文件中的路径。

\n\n

改变在gulpfile.js

\n\n
.src(["./src/**/*_test.js"]);\n
Run Code Online (Sandbox Code Playgroud)\n\n

并在package.json中中:

\n\n
"test": "mocha src\\\\**\\\\*_test.js",\n
Run Code Online (Sandbox Code Playgroud)\n\n

简单的改变就可以了。

\n\n
    \n
  • 我可以自由选择我喜欢的任何命名约定。
  • \n
  • 每个测试文件都与相关的 JS 文件保持接近。
  • \n
\n