问题描述
我正在尝试使用 JEST 为我使用类似于以下内容的静态属性编写的类编写测试:
class DataManager {
static #data = null;
static getData = () => {
return this.#data;
}
static initializeData = async () => {
await database(async (db) => {
const data = getSomeDataFromDatabase() //just example
this.#data = data;
});
}
}
现在,我想为我的 initializeData 方法做新的实现,返回一些模拟数据而不是去数据库,然后“getData”看看我是否得到了预期的结果。问题是我的 #data 属性是私有的,我不想将它暴露给外界。有什么办法吗?
解决方法
不,没有办法做到这一点。 私有字段是真正私有的。如果您想在测试中模拟它们,请不要使用私有字段。或者反过来:如果它们是私有的(一个实现细节),你不应该嘲笑它们。
您需要模拟整个 DataManager
类及其公共方法,或者如果您想测试 DataManager
本身,那么您需要模拟 database
和 {{1} } 它调用的函数。