如何在Sails.js中创建不入库的临时模型用于单元测试?
在Sails.js中创建临时模型实例(不保存到数据库)
当然可以避免生成数据库记录!在Sails里,你有几种简单靠谱的方式来创建仅用于调用实例方法的临时模型对象,完全不会触达数据库。下面分版本给你详细说:
1. Sails v1+ / Waterline v1+:用Model.build()
这是新版Sails里最推荐的方式,build()方法会帮你创建一个完整的模型实例,自动填充默认值,还能正常调用所有实例方法,但绝对不会触发数据库插入操作。
示例代码(假设你的模型是User):
// 创建临时实例,传入你需要的属性 const tempUser = User.build({ name: '测试临时用户', email: 'temp_test@example.com' }); // 直接调用实例方法,比如自定义的验证方法 const isNameValid = tempUser.validateUsername(); // 验证一下:这个实例还没保存到数据库,id是undefined console.log(tempUser.id); // 输出 undefined
2. 所有Sails版本:直接实例化模型类
不管你用的是新老版本,都可以直接通过new Model()来创建临时实例。不过要注意,这种方式下模型的默认值不会自动填充,如果需要的话,得手动调用initialize()方法来初始化:
const tempUser = new User({ name: '临时用户', email: 'temp@example.com' }); // 可选:初始化默认值和模型内部逻辑 await tempUser.initialize(); // 调用实例方法,比如格式化用户信息 const formattedInfo = tempUser.formatProfile();
3. Sails v0.12及更早版本:用Model.forge()
在旧版Sails对应的Waterline v0.x里,forge()是创建临时实例的标准方法,作用和新版的build()完全一致:
const tempUser = User.forge({ name: '旧版临时用户', email: 'temp_old@example.com' }); // 调用实例方法 tempUser.doCustomLogic();
额外注意事项
- 这些临时实例不会触发任何数据库相关的生命周期钩子(比如
beforeCreate),因为根本没有保存操作。 - 如果你的实例方法依赖于数据库生成的属性(比如
id),需要手动给实例赋值模拟,或者调整方法逻辑适配临时场景。
内容的提问来源于stack exchange,提问作者Pavlo Zhukov
相关产品推荐
相关产品推荐

