Npm 运行摩卡,不包括路径

Npm 运行摩卡,不包括路径,npm,mocha.js,Npm,Mocha.js,我有这个(在gulpfile.js中): 它是有效的 我想从mocha命令中复制相同的行为,不包括“node_modules”文件夹,运行npm测试(在package.json中): 但它不起作用 我正在使用Windows 有什么建议吗?我不是mocha或ant风格模式的大师,但可能无法在mocha命令行中排除特定路径 您可以将所有测试文件放在一个测试文件夹下,并按如下方式设置package.json: "scripts": { "test": "mocha ./test/**/*_te

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

它是有效的

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

但它不起作用

我正在使用Windows


有什么建议吗?

我不是mocha或ant风格模式的大师,但可能无法在mocha命令行中排除特定路径

您可以将所有测试文件放在一个测试文件夹下,并按如下方式设置package.json:

"scripts": {
    "test": "mocha ./test/**/*_test.js"
}
project
|- lib
   |- class1.js
   |- class1.test.js
|- node_modules
   |- lots of stuff...
您还可以提供多个起始文件夹:

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

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

.
├── src  
    ├── fileA.js  
    ├── fileA_test.js  
    ├── fileB.js  
    ├── fileB_test.js  
├── node_modules
    ├── ...
我必须更新package.json、gulpfile.js和一些用作实用程序的批处理文件中的路径

gulpfile.js中的更改:

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

"scripts": {
    "test": "mocha **\\*_test.js !./node_modules/**/*.js*",
}
简单的改变就行了

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

我有一个
spec
目录,其中包含我所有的规范。在这个目录中,我有几个子目录,其中一个是
e2e
specs目录。在那个场景中,我使用
mochaspecs$(find specs-name'*.js'-not-path“specs/e2e/*)
命令运行我的所有测试,忽略
e2e
目录中的测试。

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

"scripts": {
    "test": "mocha ./test/**/*_test.js"
}
project
|- lib
   |- class1.js
   |- class1.test.js
|- node_modules
   |- lots of stuff...
项目
文件夹运行此操作对我来说很有效:

mocha './{,!(node_modules)/**}/*.test.js'
它与树中的任何
*.test.js
文件匹配,只要它的路径不是以
/node\u modules/
为根


这是一个测试glob模式的工具,我发现它很有用。

适用于Windows用户 这个脚本将运行得很好

 "test": "mocha \"./{,!(node_modules)/**/}*.test.js\"",
我希望这会有所帮助


干杯

您可以通过传递选项排除mocha中的文件

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

mocha --exclude **/*-.jest.js
如果要排除特定的文件类型,可以执行以下操作

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

这在使用模块加载器(如mocha不理解的webpack)处理扩展时非常有用

从2019年起,节点下的现代方式是通过项目根目录中的配置文件(例如,通过
.mocharc.js

下面是
.mocharc.js
的示例

  • 重新定义默认测试目录(
    spec
    key)和
  • 从整个套件中排除示例(或任何实验性测试)(
    exclude
    key)

正如您可能看到的,配置中可以使用更多选项。在某种程度上,它们只是一个复制品。只需查找您喜欢的,并尝试在
.mocharc.js
中使用(用于CLI选项)。或者请参见。

否,我不想将所有测试文件放在特定文件夹下。我决定在要测试的文件附近放一个_test.js文件。我有许多包含测试文件的文件夹。问题是我添加了Unit.js包,它对测试文件(_test.js)使用了相同的命名约定,所以现在,我的mocha运行捕获了这些测试。我也不想改变我的命名约定。谢谢你的建议,很好。你至少在自己的文件夹里有你的项目源代码吗?这样,您可以将mocha指向
src/***\u test.js
,并将测试文件放在源代码附近。除了只有一个源文件的非常小的模块外,将js文件放在一个专用的目录中,如
src
lib
,似乎是一种常见的做法。如果问题是:我如何重新安排整个项目结构以仅运行某些测试,这将是正确的答案?很遗憾,你不得不。。。这是一种非常流行的模式,可以使测试与被测试的逻辑保持一致——我个人更喜欢这种模式。您可以尝试的一个选项是为文件添加后缀,如so
testfile.spec.js
,并只匹配以
.spec.js
结尾的所有文件。也许在你的下一个项目中试一试吧!为什么这是一种耻辱?我刚刚移动的所有源文件都是一个“src”文件夹。我没有移动测试文件,它们仍然像以前一样接近逻辑。我也不必担心命名约定冲突(它是针对“_test.js的,但另一个时间可以是.spec.js)。这样,默认情况下,它排除了与“node_modules”的任何可能冲突。建议的解决方案(通过@thebearingedge)简单有效。我更喜欢避免这种方式。我更喜欢让我的myfile_test.js靠近myfile.js文件。通过这种方式,我试图“强迫”我(和其他人)创建测试文件。还可以立即查找未测试的文件。当源代码更改时,重命名/删除测试文件也更简单。实际上,我发现这种方法更有效。谢谢,这一方法仅适用于我,在其他人尝试了几次之后。如果
节点模块
可能位于路径中的任何位置,该怎么办?
// test/setup.js
require.extensions['.graphql'] = function() {
  return null
}
module.exports = {
    'spec': 'src/front/js/tests/**/*.spec.js',
    'exclude': 'src/front/js/tests/examples/*.spec.js',
    'reporter': 'dot'
};