javascript - 动态更改 Javascript 参数

标签 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 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/

相关文章:

unit-testing - 如何对 Arduino 代码进行单元测试?

unit-testing - 如何使用 JSDom 对 Jest 中的自定义元素执行单元测试

javascript - AngularJS 拒绝的 promise 不会为 $q.all() 调用 onRejection

javascript - 为什么 typescript 会在类型联合上给出类型错误?

node.js iisnode https 500 HRESULT 0x6d 子状态 1013

node.js - 使用 post api 将数据保存到 mongodb

python - mock.patch 的正确路径

javascript - 渲染 <p :panel> content by click on expand

javascript - ngTouch 的 ngClick 阻止复选框和视频在大多数移动设备上工作

node.js - "FFMPEG not found"即使 ffmpeg 二进制文件已添加到 package.json