检查函数是否在module.exports

时间:2017-02-19 00:08:35

标签: javascript mocha chai

我想做类似的事情:

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');
});

3 个答案:

答案 0 :(得分:1)

arguments不适用于ES6箭头功能。 试试这个...args

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

}

来源:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters

答案 1 :(得分:1)

MDN's page on arrow function所述:

  

箭头函数表达式的语法短于函数表达式,并且不绑定自己的this arguments super或{{1 }}

换句话说,要检查箭头函数是否获得的参数多于预期,使用new.target不起作用(就像使用普通函数一样),所以你应该使用rest parameters:< / p>

arguments

答案 2 :(得分:0)

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

但是,在这种情况下,使用rest args不是一个很好的解决方案,以便正确定义您的API。

为了保持与你想要的兼容(显示该函数只有一个参数),你应该这样做:

module.exports = function (obj) {
  if (arguments.length > 1) {
    throw new Error('Must only pass in single argument');
  }
}

在你的箭头函数中,参数实际上与你不期望的东西联系在一起。 请参阅https://github.com/unional/some-issues/tree/so-arrow-arguments了解其实际情况。