TypeError:尝试将未定义的属性作为函数进行打包
问题描述:
下面的示例已简化。我有一个getter方法:TypeError:尝试将未定义的属性作为函数进行打包
class MyClass {
constructor() {}
get myMethod() {
return true;
}
}
这是由巴贝尔处理。我想嘲笑它:
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
而这发生在这两个版本1和2兴农库。
答
与您如何定义方法myMethod
有关的问题。当您使用get
来定义一个方法时,它实际上被视为属性而不是方法。这意味着你可以访问cls.myMethod
但cls.myMethod()
将抛出一个错误,因为它不是一个函数
问题
class MyClass {
constructor() {}
get myMethod() {
return true;
}
}
var cls = new MyClass();
console.log(cls.myMethod())
解决方案 必须更新类定义来治疗myMethod
为像下面的功能
class MyClass {
constructor() {}
myMethod() {
return true;
}
}
var cls = new MyClass();
console.log(cls.myMethod())
随着这一变化,现在您应该sinon.stub
做工精细
我明白,吸气就像一个属性对待。但是我不能在很多地方使用类定义。我需要一个解决方案来保持获得者的位置。 – jstice4all
残存吸气剂和吸附剂尚未得到支持。看到这里:https://github.com/sinonjs/sinon/issues/781 –