我有一个想要像这样重用的模型模拟:
// simplified
class ModelMock {
static async findOneAndUpdate() {
}
static async findOne() {
}
async save() {
}
}
,但需要根据模型分别模拟它们,例如
const models = {
User: ModelMock,
Business: ModelMock
}
但是我真的希望每个模拟类都是自己的东西,而不必诉诸原型语法或重复代码。
原因在于测试...
sinon.mock(MockModule.prototype).expects('save').resolves({ specific: 'thing' })
不起作用,因为我必须为每个模型都拥有一个特定的类,并且当然也共享静态方法。
同时注意静态方法和实例方法
我该怎么做?
答案 0 :(得分:1)
我求助于像这样的班级工厂:
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' })
因为您可以匿名创建一个类而不必说出我认为很有趣的名称,但是如果您不能建立工厂,是否有更好的方法可以通过实际的克隆来实现?
答案 1 :(得分:0)
如果您不想使用工厂功能,则可以使用new
:
const models = {
User: new ModelMock(),
Business: new ModelMock()
};