【问题标题】:Testing callback passing in nodejs function测试传入nodejs函数的回调
【发布时间】:2015-10-14 14:49:34
【问题描述】:

下面的代码示例,我想知道。

function testMe( input, callback ) {
  
    callback = callback || function () {};  /* 1 */
  
    // process input ...
    process( input, function (err, result ) { 
        if( err ) {
            return callback( new Error('fail processing input') ); /* 2 */
        }

        return callback( null, result ); /* 3 */
    });
}
  1. 如何用SinonJS测试callback以上3个位置?

  2. 在位置 1 重置回调是一个好习惯吗?

感谢您的 cmets。

【问题讨论】:

  • 在这个版本的示例中,testMeprocess 本身之外完全没有用,您也可以直接调用process 并完全删除testMe。如果您正在对input 进行一些预处理或对output 进行后处理,那么testMe 的存在将是合理的。

标签: javascript node.js unit-testing callback sinon


【解决方案1】:

在位置 1 处重置回调是一个好习惯吗?

在您的情况下,不,这是一种反模式。查看testMe 函数的语义,它旨在接受输入并使用输出或错误进行回调。使回调可选只会掩盖错误,延迟错误检测并使调试变得更加神秘。如果调用者根本不需要输出,为什么还要首先调用函数呢?默认回调函数实际上并没有帮助,因为没有回调的“触发后忘记”/“仅副作用”行为无法完成良好的程序流程和语义。

旁白:您的示例实际上没有任何异步行为。如果你的真实代码实际上是这样的,它可以同步返回并同步抛出错误——在这种情况下,回调不是必需的或正确的。但是我怀疑您已经“简化”了您的示例,但您的真实代码实际上是异步的。

【讨论】:

  • 感谢您给我一些分数。我刚刚编辑了示例代码。
猜你喜欢
  • 2018-07-13
  • 2018-06-16
  • 2017-09-20
  • 1970-01-01
  • 2014-10-21
  • 2021-08-08
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多