node.js - 使用 sinon 存根嵌套方法调用
问题描述
我正在尝试存根嵌套方法调用。给出以下模块:
module.exports = {
setupNewUser: (info, callback) => {
let user = {
name: info.name,
nameLowercase: info.name.toLowerCase()
};
try {
Database.save(user, callback);
} catch (err) {
callback(err);
}
}
};
我将如何存根该Database.save
方法。我做了以下事情:
it('should call save once', function() {
let Database = {
save: () => {}
};
let saveStub = sinon.stub(Database, 'save');
user.setupNewUser({ name: 'test' }, function() {});
expect(saveStub.calledOnce).to.be.true;
});
运行我得到的测试
AssertionError:预期 false 为 true
解决方案
这是单元测试解决方案:
user.js
:
const Database = require('./db');
module.exports = {
setupNewUser: (info, callback) => {
let user = {
name: info.name,
nameLowercase: info.name.toLowerCase()
};
try {
Database.save(user, callback);
} catch (err) {
callback(err);
}
}
};
db.js
:
module.exports = {
save(data, callback) {
console.log('real save');
}
};
user.spec.js
:
const sinon = require('sinon');
const { expect } = require('chai');
const user = require('./user');
const Database = require('./db');
describe('user', () => {
it('should call save once', function() {
let saveStub = sinon.stub(Database, 'save');
user.setupNewUser({ name: 'test' }, function() {});
expect(saveStub.calledOnce).to.be.true;
});
});
带有覆盖率报告的单元测试结果:
user
✓ should call save once
1 passing (7ms)
--------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
--------------|----------|----------|----------|----------|-------------------|
All files | 88.24 | 100 | 60 | 88.24 | |
db.js | 50 | 100 | 0 | 50 | 3 |
user.js | 83.33 | 100 | 100 | 83.33 | 13 |
user.spec.js | 100 | 100 | 66.67 | 100 | |
--------------|----------|----------|----------|----------|-------------------|
源代码:https ://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/56836235
推荐阅读
- node.js - 使用请求模块并将正文传递给下一个请求
- python - 在保留行的同时删除两列中的重复值
- ubuntu - 交叉编译平台应用程序上的 Google crashpad。无法在 Ubuntu 中读取 dmp 文件
- javascript - Ag-grid 过滤器排序错误
- iis - www.server.com/*.aspx 返回服务器错误而不是自定义错误
- coldfusion - ColdFusion cfloop 问题
- python - 错误:由于环境错误而无法安装软件包:[Errno 13] 权限被拒绝:我如何解决?
- javascript - 用函数解析对象
- reactjs - 我可以使用“?”。反应中的语法?
- excel - MS Excel 中负无穷和正无穷的适当值