如何为测试初始化 class 的私有 属性
How to initialize private property of a class for a test
我正在尝试使用 JEST 编写一个测试 class 我用类似于以下内容的静态属性编写:
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
class 及其 public 方法,或者如果您想测试 DataManager
本身,那么您将模拟database
和 getSomeDataFromDatabase
它调用的函数。
我正在尝试使用 JEST 编写一个测试 class 我用类似于以下内容的静态属性编写:
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
class 及其 public 方法,或者如果您想测试 DataManager
本身,那么您将模拟database
和 getSomeDataFromDatabase
它调用的函数。