jst*_*all 6 sinon ecmascript-6 babeljs es6-class
下面的例子是简化的。我有一个getter方法:
class MyClass {
constructor() {}
get myMethod() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这是由 babel 处理的。我想像这样嘲笑它:
var sinon = require('sinon');
var MyClass = require('./MyClass');
var cls = new MyClass();
var stub = sinon.stub(cls, 'myMethod');
stub.returns(function() {
return false;
});
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
TypeError: Attempted to wrap undefined property myMethod as function
这发生在 sinon 库的版本 1 和 2 上。
它与您如何定义方法有关myMethod
。当你get
用来定义一个方法时,它实际上被当作一个属性而不是一个方法。这意味着您可以访问cls.myMethod
但cls.myMethod()
会抛出错误,因为它不是函数
问题
class MyClass {
constructor() {}
get myMethod() {
return true;
}
}
var cls = new MyClass();
console.log(cls.myMethod())
Run Code Online (Sandbox Code Playgroud)
解决方案
您必须更新您的类定义以将其myMethod
视为如下所示的函数
class MyClass {
constructor() {}
myMethod() {
return true;
}
}
var cls = new MyClass();
console.log(cls.myMethod())
Run Code Online (Sandbox Code Playgroud)
现在有了这个改变,你sinon.stub
应该可以正常工作
归档时间: |
|
查看次数: |
15069 次 |
最近记录: |