2017-02-16 33 views
4

下面的示例已簡化。我有一個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興農庫。

回答

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 –

相關問題