Rails:如何为 ruby​​ 模块编写测试?

2024-04-21

我想知道如何为混合到几个类中的模块编写单元测试,但不太知道如何去做:

  1. 我是否通过在包含它们的类的测试文件之一中编写测试来测试实例方法(似乎不正确),或者您可以以某种方式将所包含方法的测试保留在特定于模块的单独文件中吗?

  2. 同样的问题也适用于类方法。

  3. 我是否应该像普通的 Rails 模型那样为模块中的每个类都有一个单独的测试文件,或者它们是否存在于通用模块测试文件中(如果存在)?


恕我直言,您应该进行功能测试覆盖范围,以覆盖模块的所有用途,然后在单元测试中单独测试它:

setup do
  @object = Object.new
  @object.extend(Greeter)
end

should "greet person" do
  @object.stubs(:format).returns("Hello {{NAME}}")
  assert_equal "Hello World", @object.greet("World")
end

should "greet person in pirate" do
  @object.stubs(:format).returns("Avast {{NAME}} lad!")
  assert_equal "Avast Jim lad!", @object.greet("Jim")
end

如果您的单元测试良好,您应该能够对它所混合的模块中的功能进行冒烟测试。

Or…

编写一个测试助手,断言正确的行为,然后将其用于混合的每个类。用法如下:

setup do
  @object = FooClass.new
end

should_act_as_greeter

如果您的单元测试良好,这可以是对预期行为的简单冒烟测试,检查是否调用了正确的代表等。

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

Rails:如何为 ruby​​ 模块编写测试? 的相关文章

  • 在 ruby​​ 中读/写受密码保护和加密的文件

    我想加密一个 ruby 程序将从中加载数据的文件 此外 我需要程序在启动时提示输入密码 该密码将用于解密文件 换句话说 该文件需要加密地驻留在计算机上 只有拥有密码的用户才能运行该应用程序 我已经开始研究 openpgp 但据我了解 这仍然
  • 是否可以让 Capistrano 通过反向 SSH 隧道进行结帐?

    我正在开发一个驻留在公共主机上的应用程序 但我必须将其源代码保存在公司防火墙后面的 Git 存储库中 我越来越very厌倦了通过缓慢的部署scp 复制整个存储库并在每次部署时通过 SSH 传送 并且希望远程主机只需执行git pull更新
  • Capybara 的 has_selector 有哪些选项?

    我在 RSpec 中遇到此错误 有没有任何文档have selector解释了选项哈希中的每个键以及它到底有什么作用 invalid keys content should be one of text visible between co
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 设备注册控制器获取零资源的自定义操作

    基本上我想要有两个单独的操作来更改密码和更改电子邮件 而不是只有一个 我已经更新了我的路由以指向继承自 Devise RegistrationsController 的新控制器 我的路线 rb devise for users contro
  • 如何从rails控制台将数据添加到数据库

    我有一个User model gt gt u User new gt
  • Ruby 可选参数和多个参数

    我试图将方法的第一个参数设置为可选 后跟任意数量的参数 例如 def dothis value 0 args 我遇到的问题是 这似乎实际上不可能 当我打电话时dothis hey how are you good 我希望它将值设置为默认值
  • 为什么 rand() 总是返回相同的数字?

    我在用 兰特 200 在我的 Rails 应用程序中 当我在控制台中运行它时 它总是返回随机数 但如果我在应用程序行中使用它 index rand 200 索引总是相同的号码 为什么会这样以及如何克服这个问题 简单的伪随机数生成器实际上生成
  • 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

    我正在尝试在 Rails 应用程序中使用 Elasticsearch 设置 CircleCI 我想已经配置了镜像 但是如何在 CI 中连接到它 到目前为止我已经尝试过 https github com elastic elasticsear
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • 一个单元在哪一级测试无锁代码?

    Can LLVM https packages debian org stretch llvm QEMU https packages debian org stretch qemu kvm GDB https packages debia
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • 在 Web 应用程序中显示最新的提交值?

    我有一些 Rails 应用程序 我使用 Git 作为版本控制系统 我使用 GitHub 或 Beanstalk 作为存储库主机 从理论上讲 我想要做的事情非常简单 以某种方式在 Web 应用程序的页脚中显示最新的提交 ID 号 哈希值 这样
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos
  • 下载所有 gems 依赖项

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

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 为什么 Rails 中的区域设置充当全局(使用 Thin 时)?

    我刚刚意识到在控制器中设置区域设置的推荐 Rails 方法 before filter set locale def set locale I18n locale params locale I18n default locale end

随机推荐

  • 线程处理时出现 msgbox 错误,GUI 块 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在执行以下 gui 时遇到问题 如果没有消息框 它可以正常工作 但是当有消息框时 它会阻塞 知道为什么 gui 在有消
  • 如何使用 Python 中的 rdkit 确定任何分子的石蜡基 CH3、CH2 和 CH 基团的数量?

    我正在尝试使用以下方法确定任何分子中石蜡基团的数量rdkitPython 中的包 最初 我开始确定石蜡基 CH3 基团 我必须将其扩展到石蜡基 CH2 和石蜡基 CH 基团 In the MWE 我试图通过匹配的子结构来确定这一点 但它无法
  • 如何包装文件对象的读写操作(只读)?

    我试图包装文件对象实例的读写操作 特别是readline and write 方法 通常 我会简单地用包装器替换这些函数 有点像这样 def log stream def logwrite write def inner data prin
  • 如何以编程方式改进破解替换密码?

    我已经编写 正在编写 一个程序来分析加密文本 并尝试使用频率分析来分析和破解它 加密文本采用每个字母替换其他字母的形式 即 a gt m b gt z c gt t 等 所有空格和非字母字符均被删除 大写字母变为小写 一个例子是 原始输入
  • decodeURIComponent 与 unescape,unescape 有什么问题?

    在回答另一个问题时 我意识到我的 Javascript DOM 知识已经有点过时了 因为我仍在使用escape unescape对 URL 组件的内容进行编码 而看起来我现在应该使用encodeURIComponent decodeURIC
  • 使用 python-pandas 索引数据帧时无法获得非唯一标签的正确切片绑定

    我有这样一个数据框df a b 10 2 3 1 0 0 0 4 about 50 000 rows 我希望选择df 5 a 但是当我打电话时df loc 5 a 我得到一个错误 KeyError Cannot get right slic
  • Java 不可变类规则

    下面的类是不可变的吗 final class MyClass private final int array public MyClass int array this array array 不 这不是因为数组的元素仍然可以更改 int
  • 如何用帖子标题 slug 重写 url?

    考虑一个网址 www example com paper ads details php req 43397 rnd 1308546000 我想将此网址更改为 www example com jobs in chanai php where
  • 更改 Eclipse 启动配置中的默认“要运行的程序”

    我时不时地使用以下命令从 Eclipse 中启动 JUnit 测试 运行方式 gt JUnit 插件测试 默认情况下 Eclipse 假设您正在运行需要工作台的东西 并在启动配置的 Main 部分中进行选择 LaunchConfig gt
  • 如何减少 Selenium 中 NoSuchElementException 的等待时间?

    在某些情况下 我知道元素不会显示 但它等待了约 30 秒 如何减少等待时间NoSuchElementException硒 示例代码 String name try name driver findElement By xpath XPath
  • Qt Ui 命名空间

    命名空间有什么意义Ui这是Qt自动生成的吗 这两个命名空间相同吗 在第一个中 其中包含 MainWindow 类的前向声明ui MainWindow h为什么它没有声明为class Ui MainWindow 编译器如何知道 MainWin
  • ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: 错误: 表上的更新或删除违反了外键约束

    有一个非常相似的问题SO https stackoverflow com questions 47624334 error update or delete on table users violates foreign key const
  • 模板中带有参数的函数。姜戈

    在我的模板中 我显示用户关注的用户列表 我希望用户能够通过按钮删除他关注的用户之一 我有一个删除关系的函数remove relationship 这是我的 models py 中的函数 class UserProfile models Mo
  • 写入 Core Data 时创建新对象

    我有一个具有一些表单字段的应用程序 提交表单后 它将数据写入我的核心数据对象 但是 当再次提交表单时 它会覆盖现有数据而不是附加到它 这正是我想要发生的情况 guard let appDelegate UIApplication share
  • php 和 simpleXml - 如何更改节点内容

    我正在尝试使用 simpleXML 更改 XML 文件中节点的内容 我知道新节点内容的变量包含正确的内容 但由于某种原因 文件在保存时没有更改 我可能缺少一些基本的东西 因为我是 simpleXML 的新手 这是整个 php 脚本
  • Android 删除接近警报

    我正在开发处理接近警报的应用程序 我可以添加接近警报 但无法删除这些接近警报 我已经在手机和虚拟设备上尝试过我的代码 但无法删除它们 这是我的代码 将位置保存到数据库并添加接近警报的活动 saveButton setOnClickListe
  • 如何处理同时碰撞以使处理顺序无关紧要?

    假设有3个球同时碰撞 我发现解决冲突的顺序会对最终结果产生影响 这当然没有意义 为了解释和简单起见 考虑 1D 中的 3 个球 质量相同 弹性碰撞 顶部的数字是速度 箭头是方向 假设它们当前都互相接触 即发生碰撞 gt 2 gt 1 lt
  • Pydev 中的 Django 会产生多个进程?

    我在 Eclipse 中的 PyDev 中设置了我的项目 每当我调试我的项目时 一切都很顺利 但是一旦我尝试重新启动 Django 服务器 它就会生成一个额外的 runserver 进程 阻塞我用于服务器的端口 8000 有没有解决方法可以
  • Nginx 位置“不等于”正则表达式

    我该如何设置locationNginx 中的条件是否响应任何不等于列出的位置 I tried location dir1 file2 php rewrite http example com 1 permanent 但它不会触发重定向 它只
  • Rails:如何为 ruby​​ 模块编写测试?

    我想知道如何为混合到几个类中的模块编写单元测试 但不太知道如何去做 我是否通过在包含它们的类的测试文件之一中编写测试来测试实例方法 似乎不正确 或者您可以以某种方式将所包含方法的测试保留在特定于模块的单独文件中吗 同样的问题也适用于类方法