如何用 Jasmine 模拟 JQuery?

2024-01-02

如何测试某个 JQuery 选择器是否已使用 Jasmine 执行?我正在尝试执行以下操作:

spyOn($.fn, 'init').andCallThrough(); 
// my code
expect($.init).toHaveBeenCalled();

但在这次通话之后,$('div')回报Object { selector="div", context=document, NaN=div.spec, more...},尽管它必须返回(并且$.fn.init('div')确实返回它):[div.jasmine_reporter, div.banner, div.logo, 4 more...]。这个东西自然会破坏代码,因为 JQuery 对象不再可用。

Example:

假设我想测试 JQuery 选择器是否已被调用,我写道:

    it('tests', function() {
        spyOn($.fn, 'init').andCallThrough();
        $('html');
        expect($.init).toHaveBeenCalled();
    });

这导致 Jasmine 出错:Error: Expected a spy, but got undefined.。然后我在 FireBug 的 $('html') 行上设置了一个断点,当我到达那里并尝试观察时,它的值是什么$('html')是,我得到:

Object { selector="html", context=document, NaN=html, more...}

如果我评论掉spyOn,在那条线上$('html')评估为:

[html]

这就是我期望看到的spyOn以及。


好吧,看起来 Jasmine 通过用包装版本替换被监视的对象来进行间谍活动,这似乎弄乱了整个 jQuery,因为(来自 jQuery 源代码):

// jQuery 对象实际上只是 init 构造函数“增强”

我建议尝试监视 init 使用的函数之一,特别是“合并”。如果您查看 jQuery 代码,您会发现任何 HTML=>DOM 内容最终都会通过合并调用返回:

return jQuery.merge( this, selector );

(如果您碰巧正在查看 jQuery 1.5.1 的源代码,那就是第 152 行)。

通过监视合并,您应该能够测试您正在测试的任何内容,而不会无意中替换 jQuery 的内容。

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

如何用 Jasmine 模拟 JQuery? 的相关文章

随机推荐

  • emacs lisp 和 c-mode:我什么时候在评论区

    我想在 c c 缓冲区中搜索正则表达式 但我想避免表达式与注释区域匹配 有没有办法使用 c 模式来知道一堆文本是否在注释区域内 或一个点是否在注释区域内 解决这个问题的方法是syntax ppss它适用于 C C 和大多数主要模式 例如 n
  • SequelizeEagerLoadingError 与 Sequelized

    我在尝试运行 Sequelized 查询时遇到错误 当我只询问用户时 该查询有效 但当我添加 包含 并尝试与另一个表 博客表 连接时 该查询会中断 这是我的用户模型 const Model DataTypes require sequeli
  • 为什么C++20不支持乱序指定初始化器?

    当我读书的时候C 参考 https en cppreference com w cpp language aggregate initialization Designated initializers 我对这一段有一个疑问 注 乱序指定初
  • 打包正方形和矩形的算法是什么?

    与Windows 8 Slate界面类似 如何用正方形和矩形很好地填充屏幕而不留下孔洞 假设 矩形基本上是两个相连的正方形 矩形可以是水平的或垂直的 屏幕宽度是正方形宽度的3倍 屏幕从上到下被填满 这样屏幕的最低部分可能无法完全对齐 矩形和
  • 是否可以手动更新构建变量 $(Build.BuildId)

    我正在帮助朋友进行 VSTS 构建 我们正在使用这两个构建标识符 构建 构建Id 构建 构建编号 这是特定于 Xamarin iOS 构建的 我们在其中使用新的 VSTS 构建任务来更新 Info Plist 我们需要使用 Build Bu
  • Python 输入清理

    我需要做一些非常快速的输入清理 我想基本上转换所有 lt gt to lt gt 我想达到相同的结果 replace lt lt replace gt gt 无需多次迭代字符串 我知道关于maketrans和这个结合str translat
  • Meteor 加载的 css 和 js 文件的顺序

    有没有办法指定Meteor自动加载的css或js文件的顺序 搜索了文档并找不到任何内容 我问这个问题是因为我正处于玩弄阶段 并且正在尝试将 Twitter Bootstrap 与 Meteor 一起使用 在 Bootstrap 附带的示例中
  • 无法正常退出XAMPP

    我用的是win10系统 我的 xampp 面板是 v3 2 4 xampp可以正常运行mysql和apache 但是当我想退出时 程序会报错 然后没有任何反应 需要帮助 请 我怎样才能解决这个问题 Add 在此输入图像描述 https i
  • 循环通过repeater控件来获取asp.net中Textbox的值

    我正在尝试循环遍历我的中继器控件并获取文本框值 但是 我收到错误 你调用的对象是空的 我的代码是 Dim txtField As TextBox Dim j As Integer 0 Confirm if user has entered
  • 需要一个计时器在特定时间每 5 分钟触发一次,直到作业完成

    我需要帮助为我的应用程序设置特定类型的计时器 我的场景是这样的 我想在一天中的特定时间 例如凌晨 4 00 运行计时器 然后 该计时器执行许多不同的事件 每个事件都会从数据库中获取数据并进行处理 使用后台工作人员 所有不同的事件需要不同的时
  • 存储过程变量

    恐怕我的术语阻碍了我在互联网上找到我想要的结果 不管怎样 我有一个相当复杂的存储过程 我需要向其传递几个变量 有没有办法在过程开始时定义变量 并在整个过程中引用该变量 而不是通过存储过程多次输入这些变量 例如 ID 号 1075 1050
  • 用画布绘制人物并设置其角度的最佳方法是什么?

    我这里遇到了大麻烦 我需要在床上画一个娃娃 就像在医疗床上一样 但我似乎做不到 我尝试创建自定义视图 然后开始绘图 我用了canvas drawCircle and canvas drawRect 我设法画了这个娃娃 但我根据自定义视图的高
  • 通过 MySQL 连接器的数据库连接 Python 与 CGI 无法正常工作

    实际上我使用的是 Ubuntu 16 04 和 python3 因此 当我在单个文件中导入 MySQL connector 和 CGI 时 该文件无法正常工作 显示错误 usr bin python3 import cgi import m
  • 使用 Angular 7 按钮获取值输入文本

    我想获取输入文本的文本并使用按钮将其保存在变量中 将其用作 firebase 查询中的参数 html
  • Woocommerce 更新购物车按钮操作后正在运行哪个 Hook

    我需要知道单击购物车页面中的更新购物车按钮后正在运行哪个挂钩 那是在购物车页面我们有 4 个按钮 update cart continue shopping proceed to checkout apply coupon 所以我想知道单击
  • Android:使用我的自定义方案重定向到 URL 不起作用

    我想 SOF 上有一些针对此类主题的答案 但仍然有些东西对我不起作用 重要的是我在 WebView 中从某个站点重定向到类似 myapp something 的 URL 之前 此重定向是由站点的 API 进行的 其中应用程序已注册以使用上述
  • 在 webpack 中指定 jQuery 作为 bootstrap

    在我的项目中 我想导入Bootstrap 但它依赖于jQuery require jquery dist jquery min require bootstrap dist js bootstrap min 当我使用Webpack处理这个项
  • 专业Fortran代码开发:日志文件创建

    我开发了一个 Fortran 代码 它具有以下特点 全局变量 13个具有多个子程序的模块 独立子程序 将 Intel MKL 库用于 LAPACK 库 线性代数 读取和写入文本文件 代码变得相当大 尽管在这个阶段我试图得到正确的答案 但代码
  • 无法从 JPEG 元数据检索标题全文

    这与在 Java 中提取长度超过 64 个字符的 IPTC 关键字 https stackoverflow com q 38399216 2564301 请参阅我的评论 问题是 在 Adob e Bridge 中添加到 JPEG 文件的标题
  • 如何用 Jasmine 模拟 JQuery?

    如何测试某个 JQuery 选择器是否已使用 Jasmine 执行 我正在尝试执行以下操作 spyOn fn init andCallThrough my code expect init toHaveBeenCalled 但在这次通话之后