我正在使用Mocha为我的Node.js应用程序编写单元测试。由于我的测试包含了大量冗余assert.equal(someFunction(arg1, arg2, arg3...), expected);
,我想做了类似的事情:
var assertEqual = function(func, result)
{
assert.equal(func, result);
}
descrirbe('someFunction()', function() {
var arg1 = ...
var arg2 = ...
var func = someFunction;
assertEqual(func, result)
arg1 = ...
arg2 = ...
assertEqual(func, result);
}
这显然不起作用,因为func
将在声明时绑定其参数。有没有办法通过引用在Javascript中传递这些参数,以便我可以继续修改它们并只调用func
而不是每次传递参数?
答案 0 :(得分:2)
只需让assertEqual返回一个函数,让你的函数代替func:
function assertEqual(func, expected) {
return function() {
var result = func.apply(this, arguments);//result if you called the old function normally
assert.equal(result, expected);//pass/fail test
return result; //return the result
}
}
var func = assertEqual(oldfunc, result);
func(arg1, arg2);
func(arg3, arg4);
//example:
var func = assertEqual(function(a,b) {return a*5 - b}, 15);
func(4, 5); //=> 15, calls assert.equal(15, 15)
func(2, 8); //=> 5, calls assert.equal(5, 15)
* 更新* 使用范围变量进行与上述相同的测试 var arg1 = 4,arg2 = 5,result = 15; //一些随机范围变量 function somefunc(){ return arg1 * 5 - arg2}; }
//same test and results as above
var func = assertEqual(somefunc, result);
func();
arg1 = 2;
arg2 = 8;
func();
答案 1 :(得分:0)
在我看来,您可以将变量设为全局变量,而不是将它们作为参数传递给函数,您可以从代码中的任何位置设置/引用它们。
编辑: 在您的示例中,参数实际上是全局的,只需将它们视为而不是参数。