【发布时间】:2020-04-29 10:52:27
【问题描述】:
我想为羽毛服务编写一些单元测试。
我希望这个测试完全独立运行,这意味着我不想使用数据库。
这是我使用 sequelize 的服务的示例 sn-p:
src/services/messages/messages.service.js
// Initializes the `messages` service on path `/messages`
const createService = require('feathers-sequelize');
const createModel = require('../../models/messages.model');
const hooks = require('./messages.hooks');
const filters = require('./messages.filter');
module.exports = function (app) {
const app = this;
const Model = createModel(app);
const paginate = app.get('paginate');
const options = {
name: 'messages',
Model,
paginate
};
// Initialize our service with any options it requires
app.use('/messages', createService(options));
// Get our initialized service so that we can register hooks
const service = app.service('messages');
service.hooks(hooks);
if (service.filter) {
service.filter(filters);
}
};
我可能会尝试使用库 sequelize-test-helpers 模拟数据库,但我不确定这将如何与羽毛结合使用。
这就是我当前在 typescript 中对该服务的测试的样子:
src/test/services/messages.test.ts
import assert from 'assert';
import { app } from '../../src/app';
describe('\'messages\' service', () => {
before(() => {
// maybe add an entry to the mocked database
});
after(() => {
// maybe delete that entry
});
it('registered the service', () => {
const service = app.service('messages');
assert.ok(service, 'Registered the service');
});
it('returns a single record', async () => {
// get result with id 1 (maybe added item in before-hook)
const res = await service.get(1);
should().exist(res);
res.should.be.a('object');
// more checks...
});
});
第一个 'it(...)' 是由羽毛本身生成的,第二个 'it(...)' 显示了我希望测试具有的功能。
但问题是我不确定如何编写这个测试,以便服务不会使用原始数据库。
你们中有人知道如何在不使用实际数据库的情况下为羽毛服务编写测试吗?
提前致谢!
【问题讨论】:
-
一个本质上只是测试feathers-sequelize的单元测试有什么用?除非您尝试在 feathers-sequelize 之上测试其他功能,否则我想我在编写测试时看不到该实用程序仅验证 3rd 方库是否按照它所说的那样做。
-
好吧,我想测试我的应用程序的每一点,甚至是服务。我也可以做一些集成测试,但在我看来,这对于单个服务来说有点过分了
-
您是否查看过您正在使用的羽毛适配器的测试?通常他们已经很好地覆盖了单元测试。如果您不扩展服务,则可能无需重新发明轮子。
-
@floriannorbertbepunkt adapter tests 的问题在于他们正在使用新生成的服务:
const app = feathers() .use('/people', memory({ events }))。我想测试我自己的服务,例如:app.service('messages'),而不是新生成它。
标签: node.js typescript unit-testing sequelize.js feathersjs