gpt4 book ai didi

javascript - 如何在 JavaScript 中克隆静态类?

转载 作者:行者123 更新时间:2023-11-29 15:09:03 25 4
gpt4 key购买 nike

我有一个模型模拟,我想像这样重用它:

// simplified
class ModelMock {
static async findOneAndUpdate() {

}
static async findOne() {

}
async save() {

}
}

但需要根据模型单独模拟它们,例如

const models = {
User: ModelMock,
Business: ModelMock
}

但我真的希望每个模拟类都有自己的东西,而不必求助于原型(prototype)语法或复制代码。

正在测试中的原因...

sinon.mock(MockModule.prototype).expects('save').resolves({ specific: 'thing' })

不会工作,因为我必须为每个模型都有一个特定的类,当然静态方法也是共享的。

注意静态方法和实例方法

我该怎么做?

最佳答案

在这种情况下类工厂似乎可以工作

我采用了这样的类工厂:

function getModelMock() {
return class {
static async findOneAndUpdate() {

}
static async findOne() {

}
async save() {

}
}
}

你可以这样使用:

const models = {
Business: getModelMock(),
User: getModelMock()
}

sinon.mock(models.Business.prototype).expects('save').resolves({ _id: 'businessId' })
sinon.mock(models.Business).expects('findOne').resolves({ _id: 'businessId' })
sinon.mock(models.User.prototype).expects('save').resolves({ _id: 'userId' })

因为你可以匿名创建一个类而不说明它的名字,我认为这很有趣,但是如果你不能创建一个工厂,有没有更好的方法来用一个实际的克隆来做到这一点?

关于javascript - 如何在 JavaScript 中克隆静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com