javascript - 使用 mocha,sinon,chai 在 javascript 中为嵌套函数编写单元测试用例
问题描述
我想为 fn1() 以下代码编写单元测试用例:
function add(a, b){
const q = 5
console.log(a)
console.log(b)
const c = a + b
console.log(c)
console.log('1')
return c
}
function fn1(){
let a = 5;
let b = 6;
let c = obj.add(a, b);
console.log(a)
console.log(b)
console.log(c)
console.log('1')
return c;
}
我想将不同的参数传递给 fn1() 中的 add(a, b)。我怎样才能使用 mocha、sinon、chai 做到这一点?
解决方案
您可以使用 sinon 存根,存根 add 方法并调用WrappedMethod,这是对原始方法的引用;为了强制将不同的参数传递给 add 方法。
但是你需要稍微结构化你的代码。
这是一个简单的示例,向您展示如何做到这一点。
我在文件 check.js 的检查对象内创建方法 add 和方法 fn1
// File: check.js
const check = {
add: (a, b) => {
const q = 5
console.log('add a:', a)
console.log('add b:', b)
const c = a + b
console.log('add c:', c)
console.log('add called');
return c
},
fn1: () => {
let a = 5;
let b = 6;
let c = check.add(a, b);
console.log('fn1 a:', a);
console.log('fn1 b:', b);
console.log('fn1 c:', c);
console.log('fn1 called');
return c;
},
};
module.exports = check;
我创建了简单的测试文件:check.spec.js
// File: check.spec.js
const sinon = require('sinon');
const check = require('./check');
describe('check', () => {
it('pass different argument to add()', () => {
sinon.stub(check, 'add').callsFake(
function () {
console.log('stub add:', arguments);
// Change the arguments here:
arguments['0'] = 7;
// Call write method with modified arguments.
return check.add.wrappedMethod.apply(this, arguments);
}
);
check.fn1();
});
});
我将第一个参数 a 更改为 7。这是我在终端运行时的结果:
$ npx mocha check.spec.js
check
stub add: [Arguments] { '0': 5, '1': 6 }
add a: 7
add b: 6
add c: 13
add called
fn1 a: 5
fn1 b: 6
fn1 c: 13
fn1 called
✓ pass different argument to add()
1 passing (4ms)
推荐阅读
- regex - 使用 Nuxt.js 和 Vue-i18n 重定向到同一页面但切换了语言 URL
- javascript - 实现此目的而不是立即调用函数表达式的更好方法?
- c# - c# uwp客户端服务器连接发送字符串
- java - 将一个项目从 recyclerview 拖到另一个视图
- python - Pandas - 使用分类处理数据透视表中的 NaN
- python-2.7 - 将 scipy 中的数组与边界集成。
- java - 没有找到 R.java 属性?
- java - 什么 Debian 软件包提供 FindJava.cmake 请求的 Java_JAR_EXECUTABLE 和 Java_JAVADOC_EXECUTABLE?
- powerbi - Power BI 从多个表创建表/报告
- wordpress - 在 PHP 的未来版本中,与其类同名的方法将不再是构造函数