Javascript 如何将参数/参数传递给通过Grunt调用的mocha测试
我有一个Gruntfile.js,通过它我使用grunt mocha测试模块调用mochaTest。我可以从命令行将参数/参数传递给gruntTask,但我很难将相同的参数传递到通过上述模块运行的spec文件中。代码如下所示Javascript 如何将参数/参数传递给通过Grunt调用的mocha测试,javascript,node.js,gruntjs,mocha.js,integration-testing,Javascript,Node.js,Gruntjs,Mocha.js,Integration Testing,我有一个Gruntfile.js,通过它我使用grunt mocha测试模块调用mochaTest。我可以从命令行将参数/参数传递给gruntTask,但我很难将相同的参数传递到通过上述模块运行的spec文件中。代码如下所示 mochaTest: { test: { options: { reporter: 'spec', quiet: false, clearRequireCache: false, clearCacheFilter:
mochaTest: {
test: {
options: {
reporter: 'spec',
quiet: false,
clearRequireCache: false,
clearCacheFilter: (key) => true,
noFail: false
},
src: [
'test/createSpec.js'
]
}
}
grunt.registerTask('e2etest', function(scope) {
console.log(scope); // logs user/session based on the parameter passed
grunt.task.run('mochaTest');
});
// Above task is invoked like,
grunt e2etest:user
(or)
grunt e2etest:session
任务的注册方式如下所示
mochaTest: {
test: {
options: {
reporter: 'spec',
quiet: false,
clearRequireCache: false,
clearCacheFilter: (key) => true,
noFail: false
},
src: [
'test/createSpec.js'
]
}
}
grunt.registerTask('e2etest', function(scope) {
console.log(scope); // logs user/session based on the parameter passed
grunt.task.run('mochaTest');
});
// Above task is invoked like,
grunt e2etest:user
(or)
grunt e2etest:session
我需要将这个值(用户/会话)传递到mochaTest中,以便可以在spec文件中访问它。基本上,其目的是为用户和会话运行createSpec.js文件,该值在spec文件中参数化,并基于套件将运行的传递值
有可能这样做吗?请告知。您可以利用节点从名为createSpec.js
的文件中读取参数(即user
或session
)
要更好地了解如何操作,请遵循以下步骤:
createSpec.js的顶部添加以下代码行:
console.log(process.argv);
grunt e2etest:user
,您应该会看到以下内容记录到控制台:
['node','/usr/local/bin/grunt','e2etest:user']
注意:所需信息位于数组的索引2处console.log(process.argv)代码>来自createSpec.js
createSpec.js 因此,上述步骤(1-3)说明了参数(
user
或session
)可以在createSpec.js
中使用process.argv
访问。在这种情况下,您可以在createSpec.js
中执行以下操作
const-argument=process.argv[2]。拆分(“:”).pop();
如果(参数=='user'){
//在此处运行“用户”特定的测试。。。
}else if(参数==='session'){
//在此处运行“会话”特定测试。。。
}
注意,我们使用的是process.argv[2].split(/:/).pop()
从位于索引2的数组项中提取user
或session
,其初始值将分别为e2etest:user
或e2etest:session
Gruntfile 您的
createSpec.js
文件现在在某种程度上依赖于名为e2etest
的grunt任务的正确调用。例如,如果用户在不提供参数的情况下运行grunt e2etest
,那么createSpec.js
就不会有什么作用
要强制正确使用e2etest
任务(即必须使用grunt e2etest:user
或grunt e2etest:session
运行任务),您可以在Gruntfile
中更改任务,如下所示:
grunt.registerTask('e2etest',函数(作用域){
如果(!scope | |!(scope=='user'| | scope=='session')){
warn(`必须用${this.name}:user或${this.name}:session`调用);
}
grunt.task.run('mochaTest');
});
上面的要点首先检查是否提供了一个参数,该参数是用户
或会话
。如果参数不正确或丢失,则使用该参数警告用户
如果您的nodejs版本不支持,请改用grunt.warn
,如下所示:
grunt.warn('Must be invoked with: ' + this.name + ':user or ' + this.name + ':session');
附加评论 如果您的用例与您在问题中提到的完全一致,那么上面的createSpec.js部分中显示的代码/要点将起作用。即,通过命令行使用
grunt e2etest:user
或grunt e2etest:session
调用。但是,如果这种情况发生了变化,并且您无法保证e2etest:user
或e2etest:session
将精确定位在进程.argv
数组的索引2处,那么您可能需要在createSpec.js
的顶部执行以下操作:
//返回数组中以开头的值
//`e2etest`然后提取冒号“”后面的字符串:`
常量参数=process.argv.filter(arg=>{
返回参数匹配(/^e2etest:.*/);
}).toString().split(“:”).pop();
如果(参数=='user'){
//在此处运行“用户”特定的测试。。。
}else if(参数==='session'){
//在此处运行“会话”特定测试。。。
}
有关详细信息,请参阅此,我认为您需要的解决方案是:
node node_模块/mocha/bin/_mocha