TypeError:尝试将未定义的属性作为函数进行打包

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.myMethodcls.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做工精细

+1

我明白,吸气就像一个属性对待。但是我不能在很多地方使用类定义。我需要一个解决方案来保持获得者的位置。 – jstice4all

+0

残存吸气剂和吸附剂尚未得到支持。看到这里:https://github.com/sinonjs/sinon/issues/781 –