我想知道Sinon是否可以用來從另一個內部調用的類中存根函數。Sinon如何使用內部使用的類的函數
例如有一個dbutil類:
class DBUtils {
getMyResult(var1, var2){
return new Promise((resolve) => {
console.log("calling real getMyResult");//I still see this in the log
resolve(var1 + var2);
});
}
}
module.exports = DBUtils;
它被稱爲在另一個類dummyService:
const dbUtils = new DBUtils();
class dummyService {
getResult(var1, var2){
//initially in my code, it returns a promise,
//but I have replaced it with your code
return dbUtils.getMyResult(var1, var2).then(item =>{
console.log("finish getting my result!");
console.log("here is my result: " + item);
return item;
});
}
module.exports = dummyService;
這是我的單元測試文件:(由@Mark_M建議應用代碼變化)
describe("dummy Test", function() {
var service = new DummyService();
const stub = sinon.stub(DBUtils.prototype, 'getMyResult');
stub.resolves("1234");
it("get result", function() {
service.getResult("ab", "cd").then(item => {
console.log(item);
});
});
});
任何人都可以幫助我理解爲什麼我的存根無效嗎?以及如何在dbUtil類中存根getMyResult函數?
================解決方案===================
有兩件事情,我錯過:
- 我應該存根DBUtils.prototype
sinon.stub(DBUtils.prototype, 'getMyResult').resolves("1234");
- 存在當我IMPOR一個錯字在我的測試中使用DBUtils。
內dummyService,我有
const DBUtils = require(./dbutils);
然而,在測試文件,我有
const DBUtils = require(./DBUtils);
不知何故,興農沒有抱怨過,這就是爲什麼我的存根得到從未注入原始方法....在我的測試中更正了導入後,我可以看到現在注入的存根結果。
@Mark_M,我最後想出了爲什麼它不像預期的那樣存在......在我的test.js中,我的DBUtils被設置爲required(./DBUtil),它應該是(./dbutil)。所以它實際上是一個錯字....我不知道是否有辦法可以檢測到這種錯誤.... – user2296188