【问题标题】:Create temp sails model创建临时帆模型
【发布时间】:2018-02-22 16:39:21
【问题描述】:

对于单元测试,我需要创建临时模型对象而不将其保存在数据库中,只是为了有一些实例方法。

模型结构示例

//User.js - my model
module.exports = {

  attributes: {

    firstName : { type: 'string' },

    lastName : { type: 'string' },


    getName: function () {
      return this.firstName + ':' + this.lastName;
    }
  }
};

我有下一个对象

const testData = {
    firstName: 'Foo',
    lastName: 'Bar'
};

这一行在 db 中创建新记录

User.create(testData);

是否可以避免创建记录?我该怎么做?

【问题讨论】:

  • 您可以设置第二个数据库连接,使用sails-disk 并通过添加connection: 'localDiskDb' 将您的模型指向该连接。这显然会在本地磁盘数据库中创建记录,但不会在您使用的任何其他数据库中创建记录。或者,您可以将 beforeCreate 生命周期回调添加到模型并在那里引发错误以阻止保存。
  • @Glen 所以,您建议在Sails.lift 中通过另一个连接传递配置?喜欢Sails.lift{model{connection:'localDiskDb'}}? P.S: ATM 我决定在before Mocha 回调中在 DB 中创建真实记录,然后在 after 回调中销毁它。但这似乎是一种解决方法。拥有临时模型实例而不在数据库中创建记录真是太好了。
  • 所以你现在所做的与我在第二点中提到的类似。你用的是什么版本的帆?
  • @Glen 在那个项目中我使用 0.12.14。但是我的新项目从版本 v1 开始。 P.S:我使用 Mocha 生命周期回调,而不是 Sails 模型。
  • 所以这个问题与 v0.12.* 有关?

标签: sails.js


【解决方案1】:

要回答您最初的问题,据我所知,在您调用 Model.create() 时关闭或打开 Sails 是否实际在您的数据库中创建记录的功能不存在,没有您或我所拥有的解决方法cmets中有描述。

话虽如此,Sails 确实为测试和开发目的提供了一个简单的解决方案。

为了方便开发,Sails 提供了一个内置的数据库适配器,称为sails-disk。此适配器通过读取数据库记录并将其写入计算机硬盘上的 JSON 文件来模拟真实数据库。

如果您使用的是 see documentation 的 Sails 版本:

在 config/connection.js 中添加到数据库的连接

localDiskDb: {
    adapter: 'sails-disk'
},

在您正在测试的模型中,将模型指向sails-disk 连接。

...
module.exports = {
    connection: "localDiskDb",

    attributes: {
...

如果您使用的是 Sails 版本 >= v1 see documentation

相反,在 config/datastores.js 中添加sails-disk 作为数据存储

localDiskDb: {
    adapter: 'sails-disk'
},

在您正在测试的模型中,如上所述,将模型指向sails-disk 数据存储区。

...
datastore: 'localDiskDb',
...

【讨论】:

  • 但这不是修改模型的好方法,因为通常他们必须将数据保存在数据库中。所以最好在单元测试的Sails.lift 期间将模型 connection|datastore 值更改为 localDiskDb。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多