Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查函数在module.exports中是否有多个参数_Javascript_Mocha.js_Chai - Fatal编程技术网

Javascript 检查函数在module.exports中是否有多个参数

Javascript 检查函数在module.exports中是否有多个参数,javascript,mocha.js,chai,Javascript,Mocha.js,Chai,我想做一些类似的事情: module.exports = (obj) => { if (arguments.length > 1) { throw new Error('Must only pass in single argument'); } } 当我记录参数时,我得到了关于模块本身的元数据,并且看不到传入的参数。有没有办法检查是否传入了其他参数 这是我的测试: it('should reject multiple arguments', () =>

我想做一些类似的事情:

module.exports = (obj) => {
   if (arguments.length > 1) {
     throw new Error('Must only pass in single argument');
   }
}
当我记录参数时,我得到了关于模块本身的元数据,并且看不到传入的参数。有没有办法检查是否传入了其他参数

这是我的测试:

it('should reject multiple arguments', () => {
  expect(fn({ data: 1}, { data: 2})).to.throw(Error, 'Too many inputs');
});

参数
不适用于ES6 arrow函数。 试试这个
…args

function f(a, b, ...args) {

}

来源:

参数
不适用于ES6箭头函数。 试试这个
…args

function f(a, b, ...args) {

}
资料来源:

如注释所示:

箭头函数表达式的语法比函数表达式短,并且不绑定自己的
this
参数
super
new.target

换句话说,要检查arrow函数获得的参数是否比预期的多,使用
arguments
不起作用(与普通函数一样),因此应使用:

请注意:

箭头函数表达式的语法比函数表达式短,并且不绑定自己的
this
参数
super
new.target

换句话说,要检查arrow函数获得的参数是否比预期的多,使用
arguments
不起作用(与普通函数一样),因此应使用:


正如其他人提到的,箭头功能是问题的原因

然而,在这种情况下,为了正确定义API,使用rest参数并不是一个好的解决方案

要保持与所需的内容兼容(显示函数只接受一个参数),应执行以下操作:

module.exports = function (obj) {
  if (arguments.length > 1) {
    throw new Error('Must only pass in single argument');
  }
}
在您的arrow函数中,参数实际上与您不期望的内容相关联。
查看它的实际功能。

正如其他人提到的,箭头功能是问题的原因

然而,在这种情况下,为了正确定义API,使用rest参数并不是一个好的解决方案

要保持与所需的内容兼容(显示函数只接受一个参数),应执行以下操作:

module.exports = function (obj) {
  if (arguments.length > 1) {
    throw new Error('Must only pass in single argument');
  }
}
在您的arrow函数中,参数实际上与您不期望的内容相关联。 查看它的实际功能。

“但是,为了正确定义API,使用rest args不是一个好的解决方案。”您能详细说明一下这一点吗?因为
函数(obj,…restArgs){…}
表明此函数正在使用
…restArgs
,而目标是禁止这样做。i、 e.API与目的相冲突。“但是,为了正确定义API,使用rest参数不是一个好的解决方案。”您能详细说明这一点吗?因为
函数(obj,…restArgs){…}
表明此函数正在使用
…restArgs
,而目标是禁止这样做。i、 e.API与意图相冲突。