Npm 运行摩卡,不包括路径
我有这个(在gulpfile.js中): 它是有效的 我想从mocha命令中复制相同的行为,不包括“node_modules”文件夹,运行npm测试(在package.json中): 但它不起作用 我正在使用WindowsNpm 运行摩卡,不包括路径,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
有什么建议吗?我不是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
的示例
- 重新定义默认测试目录(
key)和spec
- 从整个套件中排除示例(或任何实验性测试)(
key)exclude
正如您可能看到的,配置中可以使用更多选项。在某种程度上,它们只是一个复制品。只需查找您喜欢的,并尝试在
.mocharc.js
中使用(用于CLI选项)。或者请参见。否,我不想将所有测试文件放在特定文件夹下。我决定在要测试的文件附近放一个_test.js文件。我有许多包含测试文件的文件夹。问题是我添加了Unit.js包,它对测试文件(_test.js)使用了相同的命名约定,所以现在,我的mocha运行捕获了这些测试。我也不想改变我的命名约定。谢谢你的建议,很好。你至少在自己的文件夹里有你的项目源代码吗?这样,您可以将mocha指向src/***\u test.js
,并将测试文件放在源代码附近。除了只有一个源文件的非常小的模块外,将js文件放在一个专用的目录中,如src
或lib
,似乎是一种常见的做法。如果问题是:我如何重新安排整个项目结构以仅运行某些测试,这将是正确的答案?很遗憾,你不得不。。。这是一种非常流行的模式,可以使测试与被测试的逻辑保持一致——我个人更喜欢这种模式。您可以尝试的一个选项是为文件添加后缀,如sotestfile.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'
};