如何为测试初始化​​ 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 本身,那么您将模拟databasegetSomeDataFromDatabase 它调用的函数。