当前位置: 首页 > 知识库问答 >
问题:

如何监视接收函数参数的方法?

邢高爽
2023-03-14

如果我有一个函数:

function X() {
  some.external.library.method('X');
}

然后我可以测试它(我使用mocha sinon),我在其中监视外部库方法,如下所示:

var spy = sinon.spy(some.external.library, 'method');
X();
spy.calledWith('X');

…但如果实现将内部定义的函数传递给我监视的方法,该怎么办?

function X() {
  function INTERNAL() { ... }
  some.external.library.method(INTERNAL)
}

我如何测试它?

spy.calledWith(...?)

共有1个答案

汪驰
2023-03-14

如果不能访问< code>expected对象,就不能断言< code>actual对象。如果你不知道私有函数是什么——你根本无法比较它是不是同一个东西——你就需要把它公开。

然而,我认为您应该考虑测试回调是否真的做了您期望它做的事情。为什么您会关心哪个函数是作为参数传递的呢?只要这个功能提供了想要的副作用,你就没问题。检查< code>calledWith可能是测试实现细节,而不是行为,这本身可能是一种不好的做法。

您使用的是间谍,而不是存根 - 这意味着您的方法实际运行 - 它是否调用函数?如果是这样 - 您可以检查结果。如果没有 - 您可以通过多种方式访问该功能:间谍.第一调用.args[0] / spy.getCall(0).args[0]。如果它是一个存根,你可以将其配置为自动回调,就像这样:stub.yields(一些值) - 这将用一些值调用最后一个参数(你的内部函数)。

 类似资料:
  • 问题内容: 以下是我的控制器中的内容: 而且我想监视,以便在被调用时是: 如何才能做到这一点? 问题答案: 默认情况下,当您与 jasmine一起 使用时,它将模拟该函数,并且实际上不执行其中的任何操作。如果要在其中测试其他函数调用,则需要调用,如下所示: 应该这样做。

  • 本文向大家介绍PowerShell函数中接收管道参数实例,包括了PowerShell函数中接收管道参数实例的使用技巧和注意事项,需要的朋友参考一下 本文介绍在自定义PowerShell函数时,如何设置函数通过管道(Pipeline)接收输入参数。 先看一个例子,用管道作为输入参数的函数: 使用管道作为输入参数,函数的执行情况如下: 在Test-Pipeline函数中,InputObject是一个接

  • 问题内容: Java具有: 如何在Scala中实现相同的功能?也就是说,将不确定数量的参数传递给方法? 问题答案: 给出一个数组。将变量参数参数作为最后一个形式参数。

  • 本文向大家介绍SpringBoot请求参数接收方式,包括了SpringBoot请求参数接收方式的使用技巧和注意事项,需要的朋友参考一下 application/json接收 x-www-form-urlencoded、?拼接、form-data接收 UserDto 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我一直在尝试整个下午在网络上爬行,试图在动作控制器中接收JSON对象。 什么是正确的或更简单的方法? 我尝试了以下方法:1: 这给了我输入一个空值。 2: 这在尝试发布到它的jQuery方面给了我500错误?(这表示未正确绑定)。 这是我的jQuery代码: 我要做的就是在我的mvc动作中接收JSON对象? 问题答案: 不幸的是,Dictionary在MVC中存在模型绑定问题。在这里阅

  • NodeJS noob正在签入。我正在查看.listen方法的文档,该方法的格式如下: 端口/主机名的解释指出: 开始接受指定端口和主机名上的连接。如果省略主机名,服务器将接受指向任何IPv4地址的连接 我不完全理解“如果省略主机名,服务器将接受指向任何IPv4地址的连接”部分。服务器如何接受到任何IP地址的连接?是服务器接受什么而不是它能接受什么让我觉得奇怪吗?