TypeError:尝试将undefined属性包装为函数

时间:2017-02-16 10:24:29

标签: ecmascript-6 sinon babel es6-class

以下示例已简化。我有一个getter方法:

class MyClass {
  constructor() {}
  get myMethod() {
    return true;
  }
}

由babel处理。我想这样嘲笑它:

var sinon = require('sinon');
var MyClass = require('./MyClass');
var cls = new MyClass();

var stub = sinon.stub(cls, 'myMethod');
stub.returns(function() {
  return false;
});

但是我收到以下错误: TypeError: Attempted to wrap undefined property myMethod as function

这种情况发生在sinon库的第1版和第2版。

1 个答案:

答案 0 :(得分:4)

这是您如何定义方法myMethod的问题。当您使用get定义方法时,它实际上被视为属性而不是方法。这意味着您可以访问cls.myMethodcls.myMethod()会抛出错误,因为它不是函数

<强>问题

&#13;
&#13;
class MyClass {
  constructor() {}
  get myMethod() {
    return true;
  }
}

var cls = new MyClass();
console.log(cls.myMethod())
&#13;
&#13;
&#13;

<强>解决方案 您必须更新类定义,将myMethod视为下面的函数

&#13;
&#13;
class MyClass {
  constructor() {}
  myMethod() {
    return true;
  }
}

var cls = new MyClass();
console.log(cls.myMethod())
&#13;
&#13;
&#13;

现在进行此更改,sinon.stub应该可以正常运行