gpt4 book ai didi

javascript - 控制台日志记录 sinon.spy() 显示 [Function] 而不是 spy 的内容

转载 作者:行者123 更新时间:2023-11-30 19:15:29 24 4
gpt4 key购买 nike

我试图查看 sinon.spy() 的输出,但是当我执行 console.log( res.render ) 时,我只看到 [ Function] 在我运行测试时在控制台中显示。

const should = require( 'chai' ).should()
const sinon = require( 'sinon' )

const getIndex = ( req, res ) => {
res.render( 'index' )
}

describe( 'getIndex', function () {
it( 'should render index', function () {
let req = {}
let res = {
render: sinon.spy()
}

getIndex( req, res )

console.log( res.render ) // Expecting all properties from sinon.spy()
res.render.firstCall.args[ 0 ]
.should
.equal( 'index' )
} )
} )

编辑:我期待看到 sinon.spy() 中可用的所有属性。例如,firstCall.args[0] 属性,但我想查看所有属性。我知道它们列在 https://sinonjs.org/releases/v7.4.2/spies/但我希望一次看到所有属性,因为我试图更好地了解 sinon 如何进行测试。

最佳答案

长话短说

  • spy 是函数。
  • 开发工具控制台或 watch 概览不显示函数对象的属性。

spy

spy 是函数,因为它们应该用作函数代理或替换对象上的函数以跟踪对它们的调用。 spy 将在内部跟踪调用以允许程序检查。

Javascript

您可能不知道在 Javascript 中函数也是对象。

In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object. What distinguishes them from other objects is that functions can be called. In brief, they are Function objects.

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

函数可以有属性,并且可以像在“普通”对象上一样定义或配置属性。

spy 不通过调试器或 console.log() 在检查器中显示属性的原因是,开发工具知道它的函数,函数显示为这样的。

开发工具

开发工具显然假定 Function 对象(通常)没有特殊属性,因此不会枚举它们。

您也可以通过基本功能观察到这一点。在控制台中输入:

var f = function() { }
f.foo = 42;
f; // The property won't be printed

不过,您可以在断点处停止时在调试器中检查 spy 对象。您将在“源”选项卡中添加对“监视”面板的引用。然后您可以打开函数对象并检查属性。

完成之前的实验后,您确实可以通过为 f 添加监视表达式来检查函数。

正在检查的 Sinon spy 对象:

Chrome dev tools showing details on an inspected spy

关于javascript - 控制台日志记录 sinon.spy() 显示 [Function] 而不是 spy 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049270/

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