【问题标题】:How to unit test sails built in model methods?如何对模型方法中内置的风帆进行单元测试?
【发布时间】:2020-05-29 21:22:57
【问题描述】:
我有一个名为 User insails 的模型。
假设我有以下控制器:
module.exports = {
register: async function(req, res) {
var record = await User.create({
username: 'kevin chuka'
});
}
};
我想存根 User.create() 以便在测试中返回 true。
重要提示: 在测试之前提升风帆不是一种选择,因为在这种情况下,它不会是一个单元测试,而且在提升风帆时,它会与我的大多数其他单元测试相混淆。写好了。
【问题讨论】:
标签:
node.js
unit-testing
sails.js
sinon
waterline
【解决方案1】:
这里是单元测试解决方案:
controller.js:
const User = require('./user');
module.exports = {
register: async function(req, res) {
var record = await User.create({
username: 'kevin chuka',
});
return record;
},
};
user.js:
class User {
static async create() {
return 'real user';
}
}
module.exports = User;
controller.test.js:
const sinon = require('sinon');
const User = require('./user');
const controller = require('./controller');
const { expect } = require('chai');
describe('60220190', () => {
it('should create and return user', async () => {
sinon.stub(User, 'create').resolves(true);
const actual = await controller.register();
expect(actual).to.be.eq(true);
sinon.assert.calledWithExactly(User.create, { username: 'kevin chuka' });
});
});
带有覆盖率报告的单元测试结果:
60220190
✓ should create and return user
1 passing (29ms)
---------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
---------------|---------|----------|---------|---------|-------------------
All files | 83.33 | 100 | 50 | 83.33 |
controller.js | 100 | 100 | 100 | 100 |
user.js | 50 | 100 | 0 | 50 | 3
---------------|---------|----------|---------|---------|-------------------