2016-12-28 57 views
0

我想注入到構造數據庫客戶端,但是當我運行測試時,摩卡拋出異常,被調用的那個方法不是函數。Sinon not mocking method

export class CustomService { 
    constructor(database: any) { 
     database.init().then((res)=>{})); 
    } 
} 


describe('CRUD service',()=>{ 
    it('when i decide save item',()=>{ 
     let db = sinon.mock(new DatabaseService);  

     let instance = new CustomService(db); 
     db.expects('init').once(); 
     db.verify(); 
    }); 
}); 

在控制檯:

TypeError: database.init is not a function

有什麼不對?

+0

它可能不是答案,但圓括號缺少'new DatabaseService' – PunNeng

回答

1

不要的sinon.mock通過返回值要測試的代碼,而是通過原始對象你傳遞給sinon.mocksinon.mock的返回值僅用於設置斷言並檢查它們。您還需要在測試中設置報表的順序,以便在之前設置必須滿足這些條件的代碼前。這樣的事情:

describe('CRUD service',()=>{ 
    it('when i decide save item',()=>{ 
     const db = new DatabaseService(); 
     let mock = sinon.mock(db);  

     mock.expects('init').once(); 
     let instance = new CustomService(db); 
     mock.verify(); 
    }); 
});