【发布时间】:2016-10-24 23:32:40
【问题描述】:
使用 Loopback,我们创建了一些自定义的远程方法,并且我们希望对该逻辑进行单元测试。我想要完成的是只加载一个模型,而不是我们所有的模型,并对那个模型的自定义远程方法进行单元测试。
我们可以将此模型连接到内存数据库(在我们的例子中而不是 Postgres),但不知何故,我需要告诉 Loopback 这个隔离模型,而不使用 Loopback 引导。 (如果我们使用标准的 Loopback 启动(app.boot()),它将加载我们所有的模型和整个 shebang,我认为我们应该避免出于隔离目的)。
我们在一个正在进行的单元测试中设置了这个设置:
const supertest = require('supertest');
//load the schema for the model
const ContactSchema = require(path.resolve(projectRoot + '/server/models/contact.json'));
const opts = {
strict: true
};
const dataSource = loopback.createDataSource({
connector: loopback.Memory
});
const Contact = dataSource.createModel('Contact', ContactSchema, opts);
//load remote methods for this model
require(path.resolve(projectRoot + '/server/models/contact.js'))(Contact);
const app = loopback();
this.it.cb('test contact', t => {
supertest(app).get('/api/Contacts')
.expect(200)
.end(function (err, res) {
if (err) {
t.fail(err); // we naturally get a 404, because the model hasn't been attached to this Loopback server
}
else {
t.done();
}
});
});
因此,我想加载模型架构和模型逻辑,然后以隔离方式将其附加到 Loopback 应用,而不是使用 Loopback 启动。
我们可以使用 Loopback 调用来将此模型附加到 Loopback 服务器/应用程序吗?
我正在寻找这种类型的电话:
app.useModel(Contact);
基本上我想做的是这样的:
app.models.Contact = Contact;
但这绝对是错误的方法 - 只是寻找正确的 API 调用。
也许这是正确的选择?
Contact.attachTo(loopback.memory());
【问题讨论】:
-
isolation purposes是什么意思?使用环回引导并仅测试特定模型没有任何问题。 -
严格意义上的单元测试可能意味着您应该尽可能地隔离事物,甚至可能不使用实时服务器;但我很难在不启动服务器的情况下测试模型代码 w loopback boot
-
再说一次,我个人认为单元测试是浪费时间
-
我同意你的观点,但它更多的是集成测试我们在测试环回 API 时试图实现的目标。在这种情况下,最好在尽可能接近生产环境的地方启动服务器,使用 loopback-boot 等。
-
几乎 100% 同意
标签: node.js loopbackjs