运行mocha排除路径

时间:2015-12-15 23:31:39

标签: npm mocha

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

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

它有效。

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

"scripts": {
    "test": "mocha **\\*_test.js !./node_modules/**/*.js*",
}

它不起作用。

我正在使用Windows。

有什么建议吗?

7 个答案:

答案 0 :(得分:15)

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

project
|- lib
   |- class1.js
   |- class1.test.js
|- node_modules
   |- lots of stuff...

project文件夹运行此文件对我有用:

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

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

这是一个online tool,用于测试我觉得有用的glob模式。

答案 1 :(得分:6)

适用于Windows用户 这个脚本将完美运行

 "test": "mocha \"./{,!(node_modules)/**/}*.test.js\"",

我希望这会有所帮助。

喝彩!

答案 2 :(得分:5)

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

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

"scripts": {
    "test": "mocha ./test/**/*_test.js"
}

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

"scripts": {
    "test": "mocha ./test/**/*_test.js ./another_test_folder/**/*_test.js"
}

答案 3 :(得分:1)

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

.
├── src  
    ├── fileA.js  
    ├── fileA_test.js  
    ├── fileB.js  
    ├── fileB_test.js  
├── node_modules
    ├── ...

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

gulpfile.js 中的更改:

.src(["./src/**/*_test.js"]);

package.json

"test": "mocha src\\**\\*_test.js",

简单的改变,它的确有效。

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

答案 4 :(得分:1)

我有一个spec目录,其中包含我的所有规格。在该目录中,我有几个子目录,其中一个是e2e specs目录。在那种情况下,我使用mocha specs $(find specs -name '*.js' -not -path "specs/e2e/*")命令运行我的所有测试,忽略e2e目录中的那些测试。

答案 5 :(得分:0)

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

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

mocha --exclude **/*-.jest.js

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

# test/mocha.opts
--exclude **/*-test.jest.js
--require ./test/setup.js

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

// test/setup.js
require.extensions['.graphql'] = function() {
  return null
}

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

答案 6 :(得分:0)

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

以下是.mocharc.js的示例

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

您可能会看到,配置中可以使用更多选项。在某种程度上,它们只是Mocha CLI options的副本。只需查找所需的内容,然后尝试在.mocharc.js中使用(use camelCase用于包含破折号的CLI选项)。或参见the config examples