MiniTest 中的方法期望

2024-01-18

我正在尝试为 ActiveRecord 编写一个测试 - Rails 使用 MiniTest 进行测试,所以我没有选择测试框架。我想测试的条件是这样的(来自 db:create rake 任务,出于本示例的目的,被拉入方法中):

def create_db
  if File.exist?(config['database'])
    $stderr.puts "#{config['database']} already exists"
  end
end

因此,我想测试 $stderr 如果文件存在则接收 put,否则不接收。在 RSpec 中,我会这样做:

File.stub :exist? => true

$stderr.should_receive(:puts).with("my-db already exists")

create_db

MiniTest 中的等效项是什么? assert_send 似乎没有像我预期的那样运行(并且实际上没有任何文档 - 它应该在执行之前执行,例如 should_receive ,还是执行之后?)。我想我可以在测试期间用模拟临时设置 $stderr ,但是 $stderr 只接受响应写入的对象。你不能在模拟上存根方法,而且我不想在我的 stderr 模拟上设置 write 方法的期望 - 这意味着我正在测试我正在模拟的对象。

我觉得我在这里没有以正确的方式使用 MiniTest,所以一些指导将不胜感激。

更新:这是一个可行的解决方案,但它is设置 :write 的期望,这是不正确的。

def test_db_create_when_file_exists
  error_io = MiniTest::Mock.new
  error_io.expect(:write, true)
  error_io.expect(:puts, nil, ["#{@database} already exists"])
  File.stubs(:exist?).returns(true)

  original_error_io, $stderr = $stderr, error_io

  ActiveRecord::Tasks::DatabaseTasks.create @configuration

ensure
  $stderr = original_error_io unless original_error_io.nil?
end

因此,事实证明 Rails 将 Mocha 与 Minitest 结合使用,这意味着我们可以利用 Mocha 更好的消息期望。工作测试如下所示:

def test_db_create_when_file_exists
  File.stubs(:exist?).returns(true)

  $stderr.expects(:puts).with("#{@database} already exists")

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

MiniTest 中的方法期望 的相关文章

  • “没有可用的二元红宝石”是什么意思?

    每当我使用rvm install x x x 即使安装成功 我也会收到此警告 No binary rubies available for osx 10 12 x86 64 ruby 2 4 0 Continuing with compil
  • 从 url 导入 CSV Errno::ENAMETOOLONG: 文件名太长

    我正在尝试从 url 导入 CSV 文件 但我得到了Errno ENAMETOOLONG file name too long 我按如下方式处理该文件 require open uri url http de65 grepolis com
  • 如何在 Rails 控制器中调用通道方法?

    我有一个订阅用户的 ActionCable 方法 如果启动新的 convo 我也希望用户订阅新频道 我无法找出在控制器中调用通道方法的正确语法 更新 问题是消息在发送时附加到聊天框 但是当发送第一条消息时 Websocket 连接尚未建立
  • 获取设备中的当前用户ID

    如何使用设备获取控制器中的当前用户 ID 在我的控制器中我有这样的东西 def index me current user c User find me sheets c time sheets end 我收到一条错误消息 无法找到没有 I
  • 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
  • 在私有控制器方法中返回redirect_to

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

    我对 Rails 资产管道有点陌生 所以我可能做错了什么 我正在尝试为我的后端使用 Active Admin 为我的前端应用程序使用 twitter bootstrap css 我将 bootstrap css 添加到 应用程序 资产 样式
  • 创建一个简单的 Rails 3 文本助手 Gem [重复]

    这个问题在这里已经有答案了 我一直在开发我的第一个 Rails 3 插件 以打包一个我喜欢在ApplicationHelper我所有的应用程序 你可以看到整个代码在 Github 上 https github com burlesona s
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • Rails 3 + angularjs + 缩小在生产中不起作用:未知提供者:eProvider

    我已遵循我能找到的所有修复缩小的说明 例如 var MyController function renamed scope renamedGreeter MyController inject scope greeter and someM
  • Rubymine 6 更新/刷新 Rails 项目中可用的方法和路径?

    这是一个例子 假设我更新路线resources foo这给我带来了一些新的道路 例如 new foo session当我开始在 ERB 视图中输入路径时 我希望它向我显示 建议自动完成与路径匹配的名称 当我输入 new foo 我会得到所有
  • 目前最流行的 Ruby on Rails AUTHORIZATION gem/plugin 是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • 遵循 http://ruby.railstutorial.org/ 教程时出现 RSpec 错误

    我到处搜索但似乎找不到解决方案 我一直在关注有关的教程http ruby railstutorial org http ruby railstutorial org 我在第 3 章中尝试使用 rspec spec 执行测试 但是我不断收到以
  • Ruby 中的任务/未来

    代表潜在延迟的异步计算并且可以订阅其完成的模式的惯用 Ruby 模拟是什么 即类似于 NET 的东西System Threading Task 或Python 3 xconcurrent futures future 请注意 这并不一定意味
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • 浏览器关闭时 Omniauth 会话过期

    在我的 Rails 3 应用程序中 我使用 Omniauth 进行用户身份验证部分 fb twitter 实际上我遵循这个 https github com RailsApps rails3 mongoid omniauth https g

随机推荐

  • Python向用户输入文件路径添加反斜杠和引号,无法打开

    使用Python 3 9 我想 输入 文件路径 通过输入函数 然后我想打开该文件路径 我受到以下错误的阻碍 OSError Errno 22 Invalid argument C Users Hart Documents File txt
  • 如何创建清单文件以使用管理员权限启动应用程序?

    我想为我的 VB 6 0 程序创建一个清单文件 这样当我启动我的应用程序时 操作系统应该要求用户提供管理员权限 我还想知道如何将其嵌入到应用程序中 您实际上并没有在 VB 中创建清单文件 Windows 应用程序清单是一个标准文本文档 格式
  • 如何调试 JVM 中的挂起线程?

    我正在远程 Ubuntu 服务器上运行一个持久的 Java 程序 我在该服务器上拥有 root 用户权限 一段时间后 某些 CPU 核心的使用率会达到 100 日志没有显示任何可疑之处 应用程序仍然可以运行 但吞吐量有所下降 如何调试 JV
  • 从asp.net core高效发送文件

    我有兴趣将一些代码移植到 ASP NET Core 并想知道从 ASP NET Core Web 服务发送文件 也称为 下载 文件 的最有效方法 在我的旧 ASP NET 代码中 我使用的是 FileStream var content n
  • Chrome 64 更新 - 静音标签不再在

    https jsfiddle net kaldenfi rpmk93wm 3 https jsfiddle net kaldenfi rpmk93wm 3 div section section div
  • 将一个数字分成随机不相等的部分[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 所以我试图制作一个脚本 将值 4 随机拆分为 12 个不同的变量 我想不出一个好方法来正确地做到这一点 我考虑过随机化数字 使它们接近
  • 将整数数组传递给 URI 参数中的 WebAPI 方法?

    我有以下内容 HttpDelete public HttpResponseMessage DeleteFolder int ids 我正在尝试使用这个 DELETE http localhost 24144 api folder 1483
  • 如果不适合,如何将“...阅读更多”锚添加到文本末尾

    我正在寻找一种添加方法 read more 如果多行文本的高度超过 8em 则超链接到多行文本可见部分的末尾 我尝试了下面的代码但是 read more不会出现 并且只有最后一行高度的一半可见 如何让它出现并允许用户点击它 就像是 asd
  • 未定义无参数构造函数对象

    我知道这是一个重复的问题 但我找不到我的错误的答案 我试图显示数据库中保存的房间列表 但出现下一个错误 Server Error in Application No parameterless constructor defined for
  • Node.js http-proxy:错误响应未发送到客户端

    我正在使用 proxy web 转发客户端请求 当目标服务器启动时 我的代码将按预期工作 当目标服务器关闭时 ECONNREFUSED 错误将被捕获并打印到 console log 我想将该错误发送回客户端 并尝试使用此处提供的示例 不幸的
  • 通过 SharePoint 功能部署内容类型时 CPU 使用率较高

    我正在创建一个 SharePoint 功能 该功能将用于将某些内容类型 及其自定义列 字段 部署到新的 SharePoint 网站中 我使用了外部工具来生成内容类型的 CAML Andrew Connell 的自定义 STSADM 命令 h
  • 多个 dex 文件定义 Lcom/google/android/gms/internal/zzau

    我收到错误com android dex DexException Multiple dex files define Lcom google android gms internal zzau 当我运行我的应用程序时 gradle 文件是
  • 我的数组中出现双重结果(mysql_fetch_array)

    好的 我执行这个 table get personel table 1 function get personel table id global connection query SELECT query FROM employees q
  • @class 与 #import

    在 Objective C 中使用 class 或 import 有什么区别 我看过各种教程 只有少数使用 class 而大多数其他教程都使用 import class不导入文件 它只是对编译器说 即使你不知道这个类也存在 如果我使用它 请
  • 如何在单元测试中模拟环境文件导入

    在我们的角度应用程序中 我们使用环境文件来加载一些配置 环境 ts export const environment production false defaultLocale en US 然后我们在我们的一项服务中使用它 import
  • 处理 Spring Boot REST 应用程序的 404 错误时出错

    我尝试了 Spring boot 异常处理 我创建了一个 REST 应用程序 该应用程序适用于所有有效的 url 我正在尝试处理无效网址的异常 但如果我尝试使用无效的 url 访问应用程序 我会收到以下异常 13 04 02 940 htt
  • 了解 AudioBuffer 到 ArrayBuffer 的转换

    我有一个 AudioBuffer 客户端 我想将其 AJAX 到 Express 服务器 这个链接 https developer mozilla org en US docs Web API XMLHttpRequest Sending
  • 为什么 Visual Studio 不在发布输出中包含文件?

    奇怪的是 这个问题只影响一个文件 我们将其称为 test lic test lic 是一个 xml 文件 位于 asp net mvc 项目的根文件夹中 文件属性是 Build Action Content Copy To Output D
  • 如何使用 CSS 使换行比文本/元素更宽/更大

    你能告诉我如何强制 CSS 使line through属性比元素宽width 例如 h3 50 h3 and result looks like now how I can make the line wider than element
  • MiniTest 中的方法期望

    我正在尝试为 ActiveRecord 编写一个测试 Rails 使用 MiniTest 进行测试 所以我没有选择测试框架 我想测试的条件是这样的 来自 db create rake 任务 出于本示例的目的 被拉入方法中 def creat