如何模拟已模拟对象的实例方法?

2023-12-11

我需要模拟以下内容:

Class User
  def facebook
    #returns an instance of a facebook gem
  end
end

所以在我的用户测试中,要访问用户的 Facebook 信息,我需要调用user.facebook.me.info检索其信息。如果我想嘲笑这个,我目前正在使用以下内容:

@user = Factory(:user)
facebook = mock()
me = mock()
me.expects(:info).returns({"name" => "John Doe"})
facebook.expects(:me).returns(me)
@user.expects(:facebook).returns(facebook)
assert_equal "John Doe", @user.facebook.me.info["name"]

这可行,但似乎有点笨拙,有更好的方法吗?

[编辑] 我使用 mocha 作为模拟框架


你可以尝试这样的事情:-

user = Factory(:user)
user.stubs(:facebook => stub(:me => stub(:info => {:name => "John Doe"})))

如果您确实想检查是否调用了所有这些方法(我怀疑您没有),您可以执行以下操作:-

user = Factory(:user)
user.expects(:facebook => mock(:me => mock(:info => {:name => "John Doe"})))

它有点冗长,但通常值得为每个模拟对象命名:-

user = Factory(:user)
user.stubs(:facebook => stub('facebook', :me => stub('me', :info => {:name => "John Doe"})))

我希望这有帮助。

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

如何模拟已模拟对象的实例方法? 的相关文章

  • 遏制gem安装:捆绑安装失败,但正常gem安装有效[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions solve
  • 新手:我的例子中的文本替换

    In my 红宝石 on Rails应用程序中 我的助手中有一个方法 它通过以下方式打开文件 content File open myfile txt The 文件内容就好像 my car my seat my age my son my
  • 如何在 Rails 中制作动态下拉菜单?

    我正在开发一个电子商务项目 其中将有用于选择尺寸的单选按钮 我有一个数量下拉菜单 我想根据用户所选尺寸的可用库存使此下拉列表动态化 谁能告诉我如何在 Rails 上做到这一点 不会用大量的 javascript 扰乱我的视图文件 如果您使用
  • 使用“回形针”gem 和 Ruby on Rails 3 时出现问题

    我在运行 Snow Leopard v1 6 5 的 MacO 上使用 Ruby on Rails 3 我想使用 回形针 gem 所以我将它包含在我的 Gemfile 中 如下所示 gem paperclip gt 2 3 然后 在终端中运
  • 从 Ruby 运行 shell 命令:在显示输出时捕获输出?

    我有个问题 我想从另一个 ruby 脚本运行一个 ruby 脚本并捕获它的输出信息 同时让它也输出到屏幕上 runner usr bin env ruby print Enter your password password gets ch
  • 使用mongoid动态创建索引

    我有一项为我的文档创建新字段的工作 我想在这项工作结束时创建该字段的索引 我试过 Model index field gt 1 and also Mongoid Sessions default rating prediction ensu
  • 从架构中删除表 - Rails

    我想删除架构中的一个表 我在第一次启动项目时创建了数据库并希望删除该表 这样做的最佳方法是什么 I tried rails g migration drop table installs但这只会创建一个空迁移 Schema create t
  • 向 Rails 应用程序中的内置类添加方法

    我想向 Rails 应用程序中的 Array 类添加一个方法 我应该把这个方法放在哪里 编辑得更清楚 显然我把它放在某个文件中 但是我如何告诉 Rails 应用程序在哪里可以找到它 执行此操作的一种方法是在以下位置创建一个文件lib rai
  • ActiveSupport::TimeWithZone#to_date 返回错误日期

    我想要以下实例的日期部分ActiveSupport TimeWithZone 我用了to date函数 但它返回前一天的日期 例如 如果日期时间是2012 04 11 09 05 00 UTC 如果我打电话to date然后它返回2012
  • 通过名称查找进程ID

    如何在 Ruby 中通过名称或完整命令行找到 pid 而不调用外部可执行文件 我正在将 SIGUSR2 发送到命令行包含的进程ruby job rb 我想在不打电话的情况下执行以下操作pgrep uid Process uid pid pg
  • 使用 Ruby on Rails 进行设计 - 强制用户在首次登录时更改密码

    我有一个运行 Devise 的 RoR 应用程序 Rails 4 2 Ruby 2 2 0 我已经进行了设置 以便管理员用户 标识了我添加到用户模型中的 is admin 布尔值 能够创建新的用户帐户 为他们提供生成的密码和确认电子邮件 这
  • 如何在 .js 中的字符串中插入来自 ruby​​ 示例的变量[重复]

    这个问题在这里已经有答案了 在 ruby 中 您可以将变量插入到字符串中 如下所示 x sake puts I like x I like sake 例如 def what i like word I like word end 在 jav
  • GitHub API:标记提交所属(与 git describe --tag 并行)

    我正在使用 GitHub API 进行实验octokit https github com octokit octokit rb红宝石 我的目标是能够提取提交 SHA 所属的 标签 现在我可以使用命令行轻松地执行此操作 gt git des
  • rvm编译安装ruby 2.5.0出错

    我正在尝试使用 rvm 安装 ruby 2 5 0 但出现错误 我在 Ubuntu 18 16 和现在的 Linux Mint Cinnamon 上尝试过 基本上我在运行安装 ruby 的代码之前所做的是 打开 GPG 密钥https rv
  • 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?

    我想覆盖 and Ruby 中的运算符Range 原因是 我正在处理数据库中的无限日期范围 如果你拉一个infinty从 Postgres 中取出日期时间 你会得到一个Float INFINITY在红宝石中 问题是 我无法使用Float I
  • “没有可用的二元红宝石”是什么意思?

    每当我使用rvm install x x x 即使安装成功 我也会收到此警告 No binary rubies available for osx 10 12 x86 64 ruby 2 4 0 Continuing with compil
  • Ruby 中的并行赋值运算符

    我正在查看 Ruby 编程 书中的一个示例 def fib up to max i1 i2 1 1 parallel assignment i1 1 and i2 1 while i1 lt max yield i1 i1 i2 i2 i1
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • 在私有控制器方法中返回redirect_to

    前言 我正在使用设备进行身份验证 我试图阻止未经授权的用户查看 编辑或更新其他用户的信息 我最关心的是用户将 DOM 中的表单修改为另一个用户的 ID 填写表单 然后单击更新 我已经专门阅读过 像下面这样的东西应该有效 但事实并非如此 SO
  • Watir 更改 Mozilla Firefox 首选项

    我正在使用 Watir 运行 Ruby 脚本来自动执行一些操作 我正在尝试自动将一些文件保存到某个目录 因此 在我的 Mozilla 设置中 我将默认下载目录设置为桌面并选择自动保存文件 然而 当我开始运行脚本时 这些更改并未反映出来 似乎

随机推荐

  • 将产品标签移至 WooCommerce 产品描述

    我需要将产品标签移至 WooCommerce 产品描述的底部 我在用 将自定义内容添加到 WooCommerce 产品描述中 答案代码确实有效 我在产品描述下方收到文本 这是描述中的最后一行 现在我想添加产品元信息 产品 SKU 和标签 但
  • 在 php 脚本中使用缓存

    我对 php 中的缓存感到困惑 我在我的 php 文件中创建了一个用于显示 2 到 500 的文件 现在我想使用缓存文件来存储数据并显示它 我的代码如下 现在我如何使用缓存文件来保存输出并进一步在浏览器中显示 如果还有其他方法可以在 php
  • 如何从 WC_Subscription 实例对象获取用户 ID

    我有两个功能需要帮助 我希望它们能够处理我的订阅任务 代码注释 是我想要弄清楚的 如果您有其他反馈 我也愿意接受 这用于完成初始订阅付款和订阅续订 function payment made subscription How do I ge
  • MySQL 似乎正在覆盖记录

    我在 MySQL 中有一个全新的表 可以这样描述 Team Match Auto Gear Kpa Climb 1721 1 3 5 5 1 5813 2 2 2 15 0
  • Node v8 垃圾收集器 :: 如何调试长标记-清除时间?

    我使用 trace gc 标志运行我的应用程序以尝试找到一些性能问题 嗯 看来我可能已经找到了 1288678 ms Mark sweep 498 8 549 0 gt 488 8 548 0 MB 4085 ms idle notific
  • 带有 IntelliJ 和 SBT 的自定义文件夹结构的 Uber jar

    我对云还很陌生SBT IntelliJ 所以试试我的运气IntelliJ SBT构建环境以在 dataproc 集群上部署我的 jar 这是我的项目结构的屏幕截图 代码非常简单 main 定义在 mytestmain 它调用定义在中的另一个
  • Java正则表达式查找单词的完全匹配

    我正在尝试在 Java 中构建一个正则表达式模式来查找单词的精确匹配 例如 这个词hot应该在前 3 个字符串中找到 但在第四个字符串中找不到 hot in here It s hot how hot is it email protect
  • 匹配方括号内的内容,包括嵌套方括号

    我正在尝试编写一个剧透识别系统 以便将字符串中的任何剧透都替换为指定的剧透字符 我想匹配一个用方括号括起来的字符串 这样方括号内的内容就是捕获组1 并且包括括号在内的整个字符串就是匹配项 我目前正在使用 对这个答案中的表达式稍作修改here
  • ASP.NET 中的向导控件 - 如何将 NextButton Causesvalidation 属性设置为 false

    我尝试在代码和标记中设置它 但是当单击 下一步 按钮时 页面将被验证 我想防止这种情况发生 并控制何时应该进行验证 何时不进行验证 任何建议或代码示例将不胜感激 最简单的方法是从WizardStep其中验证将被跳过 但是 如果您需要高级功能
  • Python 嵌套列表理解与 If Else

    我试图使用列表理解来替换值列表中的多个可能的字符串值 我有一个列名称列表 这些名称取自cursor description UNIX Time col1 MCA col2 MCA col3 MCA col1 MCB col2 MCB col
  • 制作带有边框、圆角和透明背景的六边形形状

    我想在 CSS3 中制作一个带有边框 圆角和透明背景的六边形形状 如下图所示 我不能用圆角和边框来做这个 我的代码在这里 hexagon circle position relative margin 1em auto width 10em
  • RDLC 报告中的小计

    我需要在 RDLC 报告中显示小计 我的报告应显示如下数据 Book Student Borrowed Book1 John 2 Book1 Mary 3 Book1 Bob 1 Total 6 how to do it Book2 Ale
  • 尝试更好地理解“using”语句

    我读过几篇关于 using 语句的文章 试图理解何时应该使用它 听起来大多数人认为应该尽可能多地使用它 因为它可以保证处理未使用的物品 问题是所有的例子总是显示这样的内容 using SqlCommand scmFetch new SqlC
  • 重构方法中的多个 if-else 条件

    我正在重构现有代码 它实际上工作得很好 但它有点混乱 有多个 if else 条件检查一个变量的值并将第二个变量的值更改为从固定枚举结构获取的更新值 else if var1 valueX if var2 MyEnum A var2 MyE
  • 如何将网页居中

    我想定位我的网页 以便在放大或缩小时 网页的尺寸从中心减小或增大 例如 当放大或缩小该网站时 布局会向中心移动并远离中心 我希望你明白 我认为你正在谈论 margin 0px auto 您所要做的就是将其添加到 CSS 的正文中 body
  • sqlite3 varchar 与“like”匹配但不与“=”匹配

    使用Rails 3 1和sqlite3进行开发 测试环境 在迁移中添加了一个新表 create table api keys do t t string api key t integer user id t timestamps end
  • Gradle 提供了与 Intellij 的依赖关系

    我正在尝试构建一个 Bukkit 插件 该插件还使用exp4j 最终结果需要将 exp4j 代码包含在发布的 jar 中 但是not包含 Bukkit 代码 我听从了建议这个答案复制依赖项并使用这个答案按规定申报 Bukkit 我的 bui
  • Django:允许管理员用户编辑站点范围的设置吗?

    我有一个 Django 站点 我想允许一些站点范围的设置 ADMIN EMAIL email address for an administrative user REMINDER TEXT email text for an email
  • 使用全局注入器的 Angular 7 组件继承

    我一直在使用中描述的方法MSDN 博客文章简化扩展组件 无需提供所有依赖项super 称呼 然而 这在 Angular 7 和 Typescript 3 中已经停止工作 所以发生的事情是 在引导之后 我尝试将注入器存储在服务中 然后尝试检索
  • 如何模拟已模拟对象的实例方法?

    我需要模拟以下内容 Class User def facebook returns an instance of a facebook gem end end 所以在我的用户测试中 要访问用户的 Facebook 信息 我需要调用user