如何使用 Jasmine 模拟另一个模块中所需的模块

2024-01-26

const Client = require('./src/http/client');

module.exports.handler = () => {
    const client = new Client();
    const locationId = client.getLocationId(123);
};

我如何测试这个模块断言client.getLocationId已被调用123茉莉花中的争论?

我知道如何用诗乃实现这一目标,但我对茉莉一无所知。


与Sinon一起你会做什么:

Sinon.spy(client, 'getLocationId');

...

Sinon.assert.calledWith(client.getLocationId, 123);

和茉莉花一起,你会:

spyOn(client, 'getLocationId');

...

expect(client.getLocationId).toHaveBeenCalledWith(123);

Update:所以,你需要的是嘲笑Client当您正在测试的模块需要时,可以使用该模块。我建议使用代理查询 https://github.com/thlorenz/proxyquire为了这:

const proxyquire = require('proxyquire');
const mockedClientInstance = {
  getLocationId: () => {}
};
const mockedClientConstructor = function() {
  return mockedClientInstance;
};

const moduleToTest = proxyquire('moduleToTest.js', {
  './src/http/client': mockedClientConstructor
});

这会将您的模拟作为依赖项注入,以便当您正在测试的模块需要时./src/http/client,它会得到你的模拟而不是真实的Client模块。之后你只需监视中的方法mockedClientInstance像平常一样:

spyOn(mockedClientInstance, 'getLocationId');
moduleToTest.handler();
expect(mockedClientInstance.getLocationId).toHaveBeenCalledWith(123);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Jasmine 模拟另一个模块中所需的模块 的相关文章

随机推荐

  • 批处理文件:从串口接收数据并将其写入txt文件

    我正在尝试通过 USB 串行端口从 Arduino 提取一些数据并将其写入 txt 文件 因此 我使用批处理文件 Windows 7 普通cmd 它发送例如 d 从 Arduino 请求所需的数据 收到 d 后 Arduino 开始向 PC
  • 在没有窗口的情况下进行屏幕截图

    我一直在研究 Son Of Grab Apple 演示 我真的很难获得没有任何窗口 只有桌面 扩展坞和菜单栏 的屏幕截图 有谁知道该怎么做 下面是一些示例代码 仅使用桌面进行屏幕截图 CFArrayRef onScreenWindows C
  • 使用带有范围说明符而不是字节的 HTTP 范围标头?

    核心问题是关于HTTP headers的使用 包括Range http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 35 If Range http www w3 org Pr
  • Eclipse 无法启动但没有显示错误

    知道为什么我的 Eclipse 没有启动吗 The eclipse ini有以下内容 startup plugins org eclipse equinox launcher 1 1 0 v20100507 jar launcher lib
  • Django:为生产中的网站设置高效的日志系统

    好的 开发阶段已经结束 现在我的网站已上线 但是 我还没有设置日志记录 我的网站位于 var www html 目录 理想情况下 我想让 Django 登录 var log django 但这需要权限 将 Django 日志保存在 var
  • Android Chrome 浏览器不必要地重命名下载文件的名称和类型

    我想我会重新发布这个 因为我有更详细的信息 问题 Android Chrome 浏览器在所有情况下都会将文件重命名为 下载 在某些情况下 它会将类型重命名为 bin 例如 如果扩展名是 MOV 正如我之前提到的 同一 Android 设备上
  • 在pyspark中合并两个RDD

    假设我有以下 RDD a sc parallelize 1 2 5 3 b sc parallelize a c d e 如何将这 2 个 RDD 合并为一个 RDD 如下所示 a 1 c 2 d 5 e 3 Using a union b
  • 重用的 React 元素会阻止组件更新

    Foo是一个只应该渲染一次的组件 这可以用于性能优化 尽管这纯粹是理论问题 不解决任何特定的编码问题 这可以通过使用来实现shouldComponentUpdate或纯组件 这是推荐的方法 const Foo gt p Math rando
  • dask 和 pandas 数据帧中 apply 的不兼容性

    的一个样本triggers我的专栏Dask数据框看起来像下面这样 0 Total Traffic DNS UDP 1 TCP RST 2 Total Traffic 3 IP Private 4 ICMP Name triggers dty
  • 运行时出错 01 46,响应:...UNABLETOCONNECT

    通过蓝牙成功从 OBD II 模拟器获取数据到 Android 应用程序 现在我正在尝试将数据从 ELM327 设备获取到 Android 应用程序 我的汽车上连接了一个 ELM327 设备 蓝牙连接是由于 ECU 连接失败并出现无法连接错
  • 我应该将 .vscode 文件夹提交到源代码管理吗?

    Is the vscode文件夹是否要提交给源代码管理 在新项目中 该文件夹是空的 除了settings json文件 这个文件夹里会放什么东西 它是特定于机器的 特定于开发人员的吗 vs文件夹 从而不被提交 或者所有开发人员都应该共享这个
  • 确定安装的是哪个版本的 SharePoint?

    确定安装的 SharePoint 版本的最可靠方法是什么 无论是WSS还是MOSS 如果是MOSS 不管是标准的还是企业的 我想以编程方式检测安装的确切 SharePoint 版本 PS 我已经发过了SharePoint SE 上的这个问题
  • Django 多个动态数据库

    我一直在评估 django 并想知道以下是否可能 我已经查看了常规的多个数据库文档 因此请不要向我指出这一点 因为据我所知 尚未提及此用例 如果我错了 我收回它 我想要一个主数据库 其中驻留我的应用程序的大部分模型 但是其中一个应用程序需要
  • 如何整合我的 Xcode 项目文件?

    当我开始开发我的第一个应用程序时 我假设将文件拖到 xcode 中会将它们放入我的项目的实际目录中 并非如此 显然 Xcode 在桌面上引用了它们 有没有一种简单的方法将所有引用的文件复制到项目目录中 我的桌面很乱 使用 Finder 将所
  • Symfony2 - 以编程方式设置记住我 cookie

    我通过新的 simple form 功能实现了自定义身份验证器 main pattern simple form authenticator custom authenticator provider fos userbundle csrf
  • 调试 ASP.NET 会话状态服务器问题

    我们有一个在负载平衡服务器实例上运行的应用程序 因此配置为使用 ASP NET 会话状态服务 该服务在我们的一台数据库服务器上运行 虽然我们应用程序的两个实例都可以成功连接到状态服务器 但会话状态数据的更改并未在它们之间反映出来 FI 如果
  • 为什么原型未定义

    我知道这个问题已经被问过数百次了 但是 我似乎无法理解这个概念prototype 这是我的示例脚本 var config writable true enumerable true configurable true var defineP
  • 更改 Shapefile 的投影

    我正在尝试更改或分配德国形状文件的投影NA to proj longlat datum WGS84 no defs ellps WGS84 towgs84 0 0 0 但不知何故效果不佳 可重现的示例 可以下载Shapefile和其他文件h
  • Cmake:基于变量内容的 add_custom_command 参数

    我想要一个 Cmake 函数来将一些二进制文件复制到特定位置 为此 我有以下函数定义 function collect binaries TARGET NAME DEST DIR set targetsToCopy ARGN set cop
  • 如何使用 Jasmine 模拟另一个模块中所需的模块

    const Client require src http client module exports handler gt const client new Client const locationId client getLocati