我有一个模型模拟,我想像这样重用它:
// 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/