仅在第一次使用 Rspec 调用时存根方法

2024-02-09

如何仅在第一次调用时存根方法,而在第二次调用中它应该按预期运行?

我有以下方法:

def method
  do_stuff
rescue => MyException
  sleep rand
  retry
end

我想要的第一个电话do_stuff募集MyException,但在第二次调用中,行为正常。我需要实现这个来测试我的rescue阻止而不会出现无限循环。

有办法实现这一点吗?


您可以将一个块传递给存根,该存根将在调用存根时被调用。然后,除了执行您需要执行的操作之外,您还可以在其中执行取消存根操作。

class Foo
  def initialize
    @calls = 0
  end

  def be_persistent
    begin
      increment
    rescue
      retry
    end
  end

  def increment
    @calls += 1
  end
end

describe "Stub once" do
  let(:f) { Foo.new }
  before {
    f.stub(:increment) { f.unstub(:increment); raise "boom" }
  }

  it "should only stub once" do
    f.be_persistent.should == 1
  end
end

似乎在这里工作得很好。

$ rspec stub.rb -f doc

Stub once
  should only stub once

Finished in 0.00058 seconds
1 example, 0 failures

或者,您可以只跟踪调用次数并根据调用计数返回存根的不同结果:

describe "Stub once" do
  let(:f) { Foo.new }

  it "should return different things when re-called" do
    call_count = 0
    f.should_receive(:increment).twice {
      if (call_count += 1) == 1
        raise "boom"
      else
        "success!"
      end
    }

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

仅在第一次使用 Rspec 调用时存根方法 的相关文章

  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 下载所有 gems 依赖项

    我想通过下载任何所需的文件并将它们带到另一台计算机来安装指南针没有互联网连接 我已经下载了指南针的源包 当我在未连接的计算机上运行 gem 时 它抱怨缺少依赖项 有什么解决办法吗 这正是我遇到的问题 经过一段时间的搜索后 我找到了一个可以使
  • Capybara-webkit 无法处理与 bootstrap glyphicon 的链接

    我有一个链接 link to q span class glyphicon glyphicon trash span html safe feed item data confirm Are you sure toggle tooltip
  • 两个 ruby​​ 进程之间的通信可能/容易吗?

    如果我有一个 ruby 脚本Daemon顾名思义 它作为守护进程运行 监视系统的某些部分并能够执行需要身份验证的命令 例如更改权限 是否有一种简单的方法来拥有第二个 ruby 脚本 例如client 与该脚本通信并向其发送命令 询问信息 我
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • Ruby gem 环境问题 - LoadError: no such file to load -- robots

    我正在尝试使用 anemone gem 编写一个爬虫 这需要 robots gem 不管出于什么原因 机器人绝对不会包括在内 这是我的一些环境信息 gem list d robots LOCAL GEMS robots 0 10 1 Aut
  • 需要野科切吗?没有要加载的文件

    我正在尝试开始使用 Nokogiri 我运行了命令 gem install nokogiri 作为 Windows 7 64 位 中的管理员 控制台显示 已成功安装 和 已安装 1 个 gem 当我输入时 gem list local OR
  • 将“Authorization Bearer”哈希添加到 Net::HTTP post 请求 (Ruby)

    我怎样才能添加Authorization Bearer到 POST 请求Net HTTP 我只能在文档中找到 基本身份验证 的帮助 req basic auth user pass Source https docs ruby lang o
  • 从 Jekyll 插件向页面添加属性

    假设我想要一个包含如下内容的页面 h1 page comment count Comment s h1 for c in page comment list div strong c title strong br c content di
  • Ruby on Rails Webpacker 找不到 asset_pack_path 下的图像

    我在使用 Ruby on Rails Webpacker 在视图中包含图像时遇到问题 当我尝试使用 html img 标签和 asset pack path 在我的视图中插入图像时 出现错误 我的图像位于app javascript ima
  • 何时使用node.js、sinatra、rails? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这 3 种语言 框架的最佳用途是什么 混合所有 或 2 个 有用吗 如果您正在构建一个完整的 Web 应用程序 您可能应该使用 Rails 因为
  • ruby 管道、IO 和 stderr 重定向

    我希望有一个 ruby 程序 一个 rake 任务 观察另一个 rake 任务的输出 输出写入器输出到 stderr 我想读一下这些行 我很难设置它 如果我有一个作家 stdout writer rb 不断打印一些东西 usr bin en
  • 有没有办法避免自动更新 Rails 时间戳字段?

    如果您有数据库列created at and updated at当您创建和更新模型对象时 Rails 将自动设置这些值 有没有办法在不接触这些列的情况下保存模型 我正在引入一些旧数据 我想根据 不同名称的 旧数据字段中的相应值设置这些值
  • Capistrano:deploy.rb 文件重构

    我的deploy rb中有以下代码 namespace app do desc copies the configuration frile from shared config yml to config task copy config
  • 未知属性:user_id

    我在执行 current user stories build 期间收到错误未知属性 user id class User lt ActiveRecord Base has many stories class name Story for
  • 自动加载常量时检测到循环依赖

    我将 Rails 从版本 3 1 2 运行良好 升级到 4 0 并遇到以下错误 circular dependency detected while autoloading constant Foo 我创建了一个类ProductFactor
  • Rails 4 可安装引擎,找不到文件“jquery”

    我正在创建一个 Rails 可安装引擎插件 它使用 gem jquery rails 我在 gemspec 文件中添加了这段代码 s add dependency jquery rails gt 3 0 1 and run bundle i
  • 如何在 Ruby 中重写 require ?

    我需要覆盖require来自 Ruby 文件 这是我的 start rb 应用程序入口点 所必需的 rubygems在此之前加载 位于 start rb 中 我尝试的所有操作都出现了堆栈溢出错误 正确的做法是什么 一般来说 如果你想修补一些
  • “heroku”命令存在于以下 Ruby 版本中:

    我在使用 heroku 工具带时遇到了重大问题 我正在使用 cedar 14 堆栈 当我尝试使用不是的 ruby 版本时ruby 2 0 0 dev我收到这个错误 rbenv heroku command not found The her

随机推荐

  • 快速将大型 2d 矩阵融合为 3 列 data.table

    我有一个大矩阵num 1 62410 1 48010 我想要一个长格式的 data table e g Var1 Var2 value 1 1 1 4227 786 2 2 1 4211 908 3 3 1 4197 034 4 4 1 4
  • Javascript 按空格分隔,但不按引号分隔

    目标是在空格处分割字符串 但不分割引号中的文本数据或将其与相邻文本分开 输入实际上是一个包含值对列表的字符串 如果 value 值包含空格 则将其括在引号中 我需要一个返回值对元素数组的函数 如下例所示 输入示例 a 0 b 1 moo f
  • 使用 UCLIBC 交叉编译 PHP

    这是一个转发 之前的帖子已关闭 移至 SERVERFAULT 并再次关闭 我认为这篇文章是一个有效的堆栈溢出问题 因为我认为它是由一些 automake 编译 链接错误引起的 这是一个编程问题而不是服务器管理问题 我会检查 uClibc 的
  • Monogame:WAV 无法播放

    这是 MonoGame 3 4 我通过 VS2013 使用它 我正在使用 mgcb 编译我的 WAV 文件 就像我的纹理一样 MGCB 工作正常 但是当涉及到使用SoundEffect类 它不播放任何内容 没有例外并且SoundEffect
  • CKEDITOR,在文本编辑器 onLoad 上自动聚焦

    有人知道如何在页面加载时自动聚焦于 CKEDITOR 文本区域吗 目前 用户必须先单击文本区域才能开始输入 像 Google 一样 我希望加载页面 并且用户可以立即开始输入 而无需单击文本区域 这是启动 CKEDITOR 的当前代码
  • webRTC - 视频导致互联网上的通话中断

    更新1 我尝试像这样改变视频约束 var mediaConstraints audio true We want an audio track video width min 160 ideal 320 max 640 height min
  • 浏览器使用哪种等宽字体?

    对于 CSS 如果您指定font family monospace 我的理解是浏览器选择其默认 首选等宽字体 如果这是正确的 您如何确定您的浏览器正在使用哪种等宽字体 可以使用 5 个通用系列 serif sans serif cursiv
  • 在 Notepad++ 中显示不匹配的 html 标签

    有没有办法在 Notepad 中突出显示不匹配的 HTML 标签 例如 如果我有以下 HTML 我想要标签以某种方式突出显
  • 由于一个或多个外键属性不可为空,因此无法更改该关系

    使用 EF 更新期间出现以下错误 操作失败 无法更改关系 因为一个或多个外键属性不可为空 当关系发生更改时 相关的外键属性将设置为空值 如果外键不支持空值 则必须定义新关系 必须为外键属性分配另一个非空值 或者必须删除不相关的对象 有没有g
  • Codeigniter 论坛集成

    我想将一个简单的论坛与 Codeigniter 应用程序集成 想知道是否有人有任何建议 干杯 Laurence 我会看一下普通论坛 有很多插件 开源 而且很容易集成 即 Codeigniter http vanillaforums org
  • 以编程方式设置 UIView 的自动调整大小掩码?

    我必须以编程方式设置 autoresizingMaskUIView 我不知道如何实现这个 要实现屏幕截图中的效果 您需要执行与 DrummerB 建议相反的操作 你想要一个固定的上边距 这样你就可以让其他每一面都变得灵活 如下所示 目标C
  • 指定 Python argparse 输入参数的日期格式

    我有一个需要一些命令行输入的 Python 脚本 我正在使用argparse用于解析它们 我发现文档有点混乱 找不到检查输入参数格式的方法 我通过以下示例脚本解释了检查格式的含义 parser add argument s startdat
  • 如何在 Scala 代码中读取压缩的 xml 文件?

    如何直接从 Scala 程序中的压缩文件访问 XML 数据文件 有没有直接的方法可以以编程方式解压缩并读取 Scala 代码中的内容 以下是 2 8 1 中执行此操作的几种方法 cat gt root xml lt lt EOF
  • 如何在具有 API 7 的 Android 应用程序中使用 NumberPicker?

    我的应用程序的最小 sdk 是 7 但我可以使用 sdk 版本 11 中的 DialogFragment 因为它位于我的 lib 目录中的支持库中 我想做这样的例子 http developer android com guide topi
  • 如何防止 IE 中的 javascript: href 链接触发 window.onbeforeunload ?

    我正在为我的表单构建一个故障安全机制 它将警告用户 如果他们离开页面 他们的表单数据将会丢失 类似于 gmail 的做法 window onbeforeunload function if formIsDirty return You ha
  • 从直方图曲线中选择最佳值范围

    设想 我正在尝试跟踪两个不同颜色的物体 一开始 系统会提示用户将第一个彩色对象 例如 可能是红色 放在相机前面的特定位置 在屏幕上用矩形标记 并按任意键 然后我的程序将获取帧的该部分 ROI 并分析其中的颜色 找到要跟踪的颜色 对于第二个对
  • Edge chromium 不会显示基本身份验证弹出窗口?

    我有一个 Apache 服务器 v2 4 43 为我的网站提供服务 并且我使用一个简单的 htpasswd 我使用指令 AuthUserFile 在 htaccess 中调用它来进行身份验证 现在 该解决方案适用于所有浏览器 将显示一个弹出
  • 应用程序内的 Dropbox 身份验证

    有什么方法可以在 iPhone 中的 Dropbox 应用程序中对用户进行身份验证吗 I using Dropbox IOS https www dropbox com developers start authentication ios
  • 如果一个同步方法调用另一个非同步方法,该非同步方法是否有锁

    在Java中 如果一个同步方法包含对非同步方法的调用 那么另一个方法是否仍然可以同时访问该非同步方法 基本上我要问的是同步方法中的所有内容都有锁 包括对其他同步方法的调用 如果一个同步方法调用另一个非同步方法 该非同步方法是否有锁 答案取决
  • 仅在第一次使用 Rspec 调用时存根方法

    如何仅在第一次调用时存根方法 而在第二次调用中它应该按预期运行 我有以下方法 def method do stuff rescue gt MyException sleep rand retry end 我想要的第一个电话do stuff募