动态更改Javascript参数

动态更改Javascript参数,javascript,node.js,unit-testing,mocha.js,Javascript,Node.js,Unit Testing,Mocha.js,我正在使用Mocha为Node.js应用程序编写单元测试。因为我的测试包含了大量冗余的assert.equal(someFunction(arg1、arg2、arg3…),应该是这样的),我想做这样的事情: var assertEqual = function(func, result) { assert.equal(func, result); } descrirbe('someFunction()', function() { var arg1 = ... var ar

我正在使用Mocha为Node.js应用程序编写单元测试。因为我的测试包含了大量冗余的
assert.equal(someFunction(arg1、arg2、arg3…),应该是这样的),我想做这样的事情:

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
,而不是每次都传递参数?

在我看来,您可以将变量设置为全局变量,而不是将它们作为参数传递给函数,您可以在代码中的任何位置设置/引用它们

编辑:
在您的示例中,参数实际上是全局的,只需将其视为全局参数而不是参数。

只需使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)
*更新* 使用范围变量进行与上述相同的测试
变量arg1=4,arg2=5,结果=15//一些随机范围变量 函数somefunc(){ 返回arg1*5-arg2}; }


我怎样才能通过在before
var func=
下设置它们,用func的不同参数再次调用这个函数?这将正常调用原始函数(例如,如果oldfunc=function(a,b){return a==b}和func=assertEqual(oldfunc,false),调用func(4,5)调用assert.equal(true,false)但我每次都需要用新参数重置oldfunc。这完全违背了我的目的,因为我也可以调用函数的参数并将其传递给
assert.equal
。我想定义一个函数,设置哪些变量是它的参数,当我更改这些变量时,函数中的参数会更改(有点像通过引用传递),而不是用新参数重新定义函数。这有意义吗?看看我上面的代码。我再次调用
assertEqual
,并重置参数,而不重新定义
func
是什么。认为这应该适合你所寻找的。如果你想改变预期,你会看到很多丑陋的东西。我可以想到的两种方法是使函数的结果达到预期效果,或者在非本地的范围内根据需要使用assertEqual。它们位于
descripe()
函数中。您将传递什么给func?在assert.equal上,它应该是func()而不是func
//same test and results as above
var func = assertEqual(somefunc, result);
func();
arg1 = 2;
arg2 = 8;
func();