RSpec 类变量测试

2023-11-23

我正在使用 RSpec 在 gem 中测试类级实例变量(和设置器)。我需要测试以下内容:

  1. 如果从未使用过 setter,则会提供正确的默认值。
  2. 可以通过设置器成功更新变量。

显然这里存在运行顺序问题。如果我使用设置器更改值,我就会忘记默认值是什么。我可以在 setter 测试之前将其保存到变量中,然后在最后重置该值,但这只能保护我,如果所有 setter 测试都遵循相同的做法。

测试变量默认值的最佳方法是什么?

这是一个简单的例子:

class Foo
  class << self
    attr_accessor :items
  end
  @items = %w(foo bar baz) # Set the default
  ...
end

describe Foo do

  it "should have a default" do
    Foo.items.should eq(%w(foo bar baz))
  end

  it "should allow items to be added" do
    Foo.items << "kittens"
    Foo.items.include?("kittens").should eq(true)
  end
end

class Foo
  DEFAULT_ITEMS = %w(foo bar baz)

  class << self
    attr_accessor :items
  end

  @items = DEFAULT_ITEMS
end

describe Foo do
  before(:each) { Foo.class_variable_set :@items, Foo::DEFAULT_ITEMS }

  it "should have a default" do
    Foo.items.should eq(Foo::DEFAULT_ITEMS)
  end

  it "should allow items to be added" do
    Foo.items << "kittens"
    Foo.items.include?("kittens").should eq(true)
  end
end

或者也许更好的方法是重新加载类

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

RSpec 类变量测试 的相关文章

  • Ruby 的字符串并置功能的官方文档在哪里?

    我最近意识到 如果你并置一系列 Ruby 字符串文字 例如 a b c 它相当于这些字符串文字的串联 但是 我在任何地方都找不到这种语言功能的记录 我使用术语 并置 和 串联 进行搜索 但只在几个 StackOverflow 响应中找到了对
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • 需要野科切吗?没有要加载的文件

    我正在尝试开始使用 Nokogiri 我运行了命令 gem install nokogiri 作为 Windows 7 64 位 中的管理员 控制台显示 已成功安装 和 已安装 1 个 gem 当我输入时 gem list local OR
  • 如何全局忽略 UTF-8 字符串中的无效字节序列?

    我有一个 Rails 应用程序从 Rails 版本 1 以来的迁移中幸存下来 我想忽略all其上的无效字节序列 以保持向后兼容性 我不知道输入编码 示例 gt Men xFC split n ArgumentError invalid by
  • Ruby 在 Windows 上找不到 sqlite3 驱动程序

    我正在尝试在 Windows 上设置 Ruby on Rails 我正在使用看起来不错的 Flash Rails 发行版 但是 sqlite3 有一个问题 我发现线程告诉我安装版本 1 2 3 安装得很好 我使用的是 ruby 1 9 0
  • 有没有办法避免自动更新 Rails 时间戳字段?

    如果您有数据库列created at and updated at当您创建和更新模型对象时 Rails 将自动设置这些值 有没有办法在不接触这些列的情况下保存模型 我正在引入一些旧数据 我想根据 不同名称的 旧数据字段中的相应值设置这些值
  • 启动同一作业的多个延迟作业进程

    我在运行多个工作人员的设置中使用延迟作业 就我的问题而言 这并不重要 但假设我运行 10 个工作线程 当前在开发模式下执行此操作 我遇到的问题是两个不同的工作人员有时开始处理同一项工作 调用我的工作对象上的执行方法 据我所知 延迟作业正在使
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • 未知属性:user_id

    我在执行 current user stories build 期间收到错误未知属性 user id class User lt ActiveRecord Base has many stories class name Story for
  • 由于 MIME 类型不受支持,拒绝应用样式

    我不断收到一条错误消息 指出 MIME 类型 text html 不可执行或不是受支持的样式表 MIME 类型 并且启用了严格的 MIME 检查 我的链接代码是
  • 在 Yosemite 上安装 Ruby 1.9.2 时出错

    我在 Yosemite 上使用 rvm 安装 ruby 1 9 2 时遇到错误 有人可以帮助我吗 我更新了自制程序和rvm 我正在与其他人合作处理这个项目 所以我无法升级 ruby 我在下面放置了我的输出的链接 提前致谢 Kanyons M
  • 自动加载常量时检测到循环依赖

    我将 Rails 从版本 3 1 2 运行良好 升级到 4 0 并遇到以下错误 circular dependency detected while autoloading constant Foo 我创建了一个类ProductFactor
  • 将一幅图像合成到另一幅图像上时,RMagick 透明度不起作用

    在下面的代码中 我尝试在一些山脉的图像上覆盖一个透明的正方形 我认为它会起作用 但是通过设置background color none 它不会使图像透明 结果是左上角有一个黑色方块 所需的结果是黑色方块应该是透明的 require open
  • ArgumentError:Ruby 中的参数数量错误

    试图解决这个问题 class Person def initialize name name name end def greet other name puts Hi other name my name is name end end
  • 如何在 Ruby 中重写 require ?

    我需要覆盖require来自 Ruby 文件 这是我的 start rb 应用程序入口点 所必需的 rubygems在此之前加载 位于 start rb 中 我尝试的所有操作都出现了堆栈溢出错误 正确的做法是什么 一般来说 如果你想修补一些
  • Rails:Passenger Standalone 适合生产部署吗?

    问题标题几乎概括了这一点 我找不到任何好的资源来概述使用 Phusion Passenger Standalone 进行 Rails 应用程序部署的优点 缺点 它与运行 Passenger Nginx 或 Passenger Apache

随机推荐

  • “multipart/form-data”POST 请求实际上应该包含带有上传图像数据的字符串吗?

    我正在为一个 Web 应用程序创建一些性能测试 该应用程序发送的请求类型与浏览器发送到我们的服务器的类型相同 其中一个请求是上传图像的 POST 我在看这个问题看起来图像文件的实际内容应该位于请求正文内 然而 当我在 Chrome 中使用
  • 如何检查设备是否为 iPad 或 iPhone 无法正常工作

    我目前正在更新一个应用程序 我需要知道该应用程序是否正在 iPad 上使用 我上网查了一下 发现了下面的代码 我在 Xcode 中使用了 iPad 模拟器并运行了两个 if 语句 但是每当我运行代码时 什么也没有发生 打印消息不打印 此代码
  • 密封一个类

    过去我并没有太在意封闭班级 但我发现自己想知道最好的做法是什么 如果您知道一个类不会或不应该从中派生 您是否会将其密封 作为预防措施 只是将密封关键字保留在外 因为知道有人尝试从中派生的机会很小 我想我要问的是 您是否应该密封所有不打算用于
  • 如何将 EC2 实例分配给子网内的固定 IP 地址?

    我正在使用 CloudFormation 定义子网和 EC2 实例 我想为 EC2 实例分配特定的私有 IP 地址 并尝试使用如下资源定义来实现此目的 当我尝试部署模板时 NetworkInterface 资源的创建失败并显示以下消息 地址
  • Django Rest Framework - 如何在序列化器中嵌套多个字段?

    我有几个带有多个控制字段的基本模型 其中位置字段由纬度 经度 精度 提供商和客户时间组合而成 我的大多数可写模型 以及资源 都是从这个基本模型继承的 我试图让 DRF 序列化嵌套 位置 字段中的位置相关字段 例如 id 1 name Som
  • MYSQL 禁用自动修剪

    如果我输入两个只有空格的字符串 我会收到此错误消息 错误 1062 键 PRIMARY 的条目 重复 如何关闭 自动修剪 我正在用这个Charset uft8 uft8 bin和这个数据类型 Varchar 根据SQL 92根据文档 当比较
  • 如何使用 RxJs 推迟任何 AJAX 调用请求,直到前一个请求解决

    我有一个可观察的对象 它表示由某些外部组件触发的操作 为了这个问题的目的 我们将其称为createBananaAction 我有一个bananaService用一种方法create执行 AJAX 请求并返回创建的香蕉作为Promise 因此
  • 对包含引号的字符串使用替换运算符 powershell

    我正在寻找运行命令 foreach object replace 然而 我尝试使用的字符串可以描述如下 this string has quotes 整条线是 foreach object replace this string has q
  • Beautiful Soup 根据部分属性值查找标签

    我试图根据部分属性值来识别 html 文档中的标签 例如 如果我有一个 Beautifulsoup 对象 import bs4 as BeautifulSoup r requests get http My Page soup Beauti
  • 如何找到两个地址之间的距离? (Java服务器端)

    我正在开发一个 社交 地理感知应用程序 价值数百万美元的问题是如何列出 我的位置 X 英里内 的一组项目 因为有数百万个应用程序可以做到这一点 我惊讶地发现只有 Google Maps API 具有免费的网络服务 更糟糕的是 只有在 Goo
  • CSS 固定容器内的 div

    如何将固定 div 包含在 div container 中 其中固定 div 仅固定在 div container 中 而不是页面的其余部分 这意味着如果我向下滚动页面 在容器 div 之外 固定 div 不会滚动 很难解释 看这个例子 h
  • 由于函数排序导致 JSLint“超出范围”错误?

    JSLint 似乎对函数排序很挑剔 这很好 function a use strict return 1 function b use strict a 虽然这给出了 a is out of scope错误信息 function b use
  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • UNIX 中的管道不应该是单向的吗?

    看一下下面的代码 include
  • 根据属性从 NSArray 创建 NSSet

    一个人如何创建一个NSSet基于属性的数组中的对象 例如对象数组 每个对象都有一个强引用type属性 并且数组中存在每种类型的多次出现 这怎么能变成一个NSSet持有每种类型的单个对象 NSSet distinctSet NSSet set
  • Windows 更新导致 MVC3 和 MVC4 停止工作

    我是唯一一个在 10 月 15 日安装了 Windows Update 8 1 并突然 MVC 由于此警告而停止工作的人吗 警告 1 无法解析此引用 无法找到程序集 System Web Mvc Version 4 0 0 0 Cultur
  • jQuery 访问输入隐藏值

    我怎样才能访问
  • Swift 1.2 无法使用相同的函数名称和不同的参数[重复]

    这个问题在这里已经有答案了 我有两个名称相同但参数不同的函数 第一个接受一个函数作为参数 该函数接受 2 个双精度数并返回 1 第二个接受一个函数作为参数 该函数接受 1 个 double 并返回 1 这在 Swift 1 1 中有效 在
  • Mysql SELECT 里面的 UPDATE

    UPDATE forms SET pos SELECT MIN pos 1 FROM forms WHERE id id 这不起作用 错误消息 You can t specify target table form for update i
  • RSpec 类变量测试

    我正在使用 RSpec 在 gem 中测试类级实例变量 和设置器 我需要测试以下内容 如果从未使用过 setter 则会提供正确的默认值 可以通过设置器成功更新变量 显然这里存在运行顺序问题 如果我使用设置器更改值 我就会忘记默认值是什么