我正在尝试做一些 javascript 测试驱动的开发,并想用模拟的替换 dao。
假设我有一个对象 myObject,它有一个私有(private) var dao,我想为它创建一个 setter:
var dao = new RealDao();
function funcUsesDao() {
dao.doStuff();
}
然后在另一个文件中我有一个该对象实例的句柄并想添加一个 setter 以便我可以执行以下操作:
var mockDao = {function doStuff() { /*mock code */}};
myObject.setDao(mockDao);
myObject.funcUsesDao(); should use mock dao
环境细节是这是 node.js,我有句柄的对象是通过 var myObject = require('../myObject');
最佳答案
您将为该类使用一个构造函数,将 dao 设置为 RealDao,然后在 setDao 中将该 dao 设置为新的 dao。或者在构造函数中,您将引用 dao,并在 null 上将其分配给新的 RealDao()。 (至少,这是我对人们通常如何通过构造函数分配新接口(interface)进行测试的理解)
//something like this
function Dao(interface){
this.dao = interface || new RealDao();
}
否则,您上面列出的内容是准确的。您只需按照代码中的指示提供 setDao 方法。
关于javascript - 如何向可以访问其变量的javascript对象添加函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547816/