gpt4 book ai didi

javascript - 重新接线: How is it possible for this function to execute without returning the specified return value

转载 作者:行者123 更新时间:2023-12-02 13:55:01 25 4
gpt4 key购买 nike

我正在使用Rewire package注入(inject)与进行单元测试相关的模拟。我希望能够在我的模块中测试私有(private)函数:

var a = 10;
var b = 20;

function adder (){ //not exported
console.log(a);
console.log(b);
return a + b;
};

通过这样做:

var rewire = require('rewire'),
md = rewire('./module'),
mock = {a: 30, b: 40},
cb = md.__get__('adder');

console.log(md.__with__(mock)(cb));

将以下内容记录到控制台:

30
40
undefined

我觉得这很奇怪,因为 3040 的日志记录似乎表明 adder() 已成功使用 模拟

但是为什么返回值是undefined而不是70

最佳答案

在我看来,rewire 返回的回调函数不会返回值,除非它是一个 promise (在这种情况下它返回 promise )。

md.__with__(mock) 返回一个接受回调的函数,因此它可以归结为如下所示:function(callback){callback(); }

并且由于 __with__() 返回的函数不会返回回调的结果,因此您最终会在控制台日志中看到 undefined 。换句话说,您正在记录模拟返回的函数的结果,而不是传递给模拟的回调的返回值。

编辑...试试这个作为证据:

md.__with__(mock)(function(){ console.log(cb());});

这里我们将记录 cb(加法器)的返回值,而不是回调中未定义的返回值。

关于javascript - 重新接线: How is it possible for this function to execute without returning the specified return value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755975/

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