gpt4 book ai didi

javascript - 动态更改 Javascript 参数

转载 作者:行者123 更新时间:2023-12-02 18:14:37 25 4
gpt4 key购买 nike

我正在使用 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 在声明时会绑定(bind)其参数。有没有办法在 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)

*更新*使用范围变量进行与上面相同的测试
var arg1 = 4,arg2 = 5,结果 = 15;//一些随机范围变量 函数 somefunc() { 返回 arg1*5 - arg2}; }

//same test and results as above
var func = assertEqual(somefunc, result);
func();
arg1 = 2;
arg2 = 8;
func();

关于javascript - 动态更改 Javascript 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com