确保 gem 与 Rails 3.x 和 4.0 兼容的 gem 测试策略?

2023-11-23

我见过一些虚拟 Rails 应用程序的示例(用于测试,因此它们通常处于测试或规范目录下)与 Appraisals gem 一起使用,据说可以与 Rails 3.x 和 Rails 4 一起使用,但它们看起来很黑客且功能不完整。这在某种程度上是预料之中的,因为它是一个精简的弗兰肯斯坦怪物,试图与 Rails 3 和 Rails 4 的各个版本兼容。

我提到过尝试进行此类测试的项目(截至 2013 年 3 月下旬),例如 less-rails 和 ember-rails,但这种使用各种版本的 Rails 进行测试的方法似乎不太干净,而且尝试调试非标准 Rails 应用程序并非易事,尤其是在 Rails 的 Beta 版本中。

如果有一种更干净的测试方法,让您可以为每个版本的 Rails 提供完整的 Rails 应用程序,通过一些魔法进行测试,那么设置或维护并不困难,并且不需要非标准路径黑客,那就太好了在一些地方等等

使用不同版本的 Rails(至少包括最新的 Rails 3.1.x、3.2.x 和 4.0.0.beta1)测试 gem 有哪些可用策略,每种策略的优缺点是什么?


一些选项来自相关主题在 Rails 核心列表中:

选项 1:评估 gem 和单个 Rails 虚拟应用程序

Ken Collins 提到使用评估和 Rails“虚拟”应用程序:

我使用混合测试 minitest-spec-rails 针对 3.0、3.1、3,2 和 4.0 评估和 dummy_app 的最低配置取决于 它正在测试哪个 Rails 版本。一些链接:

https://github.com/metaskills/minitest-spec-rails https://github.com/metaskills/minitest-spec-rails/blob/master/test/dummy_app/init.rb

类似的技术用于少轨, 余烬轨道, and 高电压除其他外。

我使用了类似的设置高电压 in 休息的_json(v3.3.0),但使用 4.0.0-beta1 创建的完整 Rails 应用程序,我对其进行了最低限度的修改,以便也可以与 Rails 3.1.x/3.2.x 一起使用。

Update: 可能想看看许可者对于最近的例子。

优点:相当简单。可以从命令行等测试各种 Rails 版本。可以是非常小的 Rails 应用程序配置,也可以使用具有细微差别的完整 Rails 应用程序。

缺点:仍然为多个 Rails 版本重复使用相同的 Rails 应用程序,因此存在一些条件和不需要的配置。 (某些文件可能存在不适用于其他版本的 Rails 等的问题,但似乎不是一个大问题。)

选项 2:Rails 版本作为环境变量,使用单个 Gemfile、单个 Rails 虚拟应用程序,依靠 travis-ci 在多个版本中进行测试

Steve Klabnik 提到了一个使用单个 Gemfile、单个完整 Rails 应用程序的解决方案(即使在“虚拟”目录下,并且不使用评估 gem,而是依靠 travis-ci 进行测试:

我一直想更多地讨论这个话题,因为我一直在这样做 最近我得到了一堆宝石。我有两个这样做:

Draper: https://github.com/drapergem/draper

区域设置器:https://github.com/jcasimir/locale_setter/

基本上,我将整个 Rails 应用程序嵌入到 gem 中,然后 通过环境变量在 travis 上针对多个版本的 Rails 运行它。

优点:简单。不依赖评估宝石(这不是问题,但可能更容易维护)。

缺点:据我所知,多个 Rails 版本仍然重复使用相同的 Rails 应用程序。除非使用 travis-ci 或以干净的 gemset 开头的东西(即如果在命令行运行),否则当前不会区分 gemset,因此较新的 gem 可能会与较旧的 Rails 等一起使用,但 Steve 说这是否会导致问题,您只需吹掉锁并重新捆绑即可。

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

确保 gem 与 Rails 3.x 和 4.0 兼容的 gem 测试策略? 的相关文章

  • Mac Snow Leopard 上的 Curb gem 出现问题

    这消耗了我几个小时的时间 在控制台中我运行 require curb 我收到错误 LoadError dlopen usr local lib ruby gems 1 8 gems taf2 curb 0 5 4 0 lib curb co
  • pow 说: Bundler::GemNotFound:无法在任何源中找到 rake-0.9.2.2

    我有一个运行良好的 Rails 应用程序rails s 但是当我尝试使用 pow 加载它时 我收到此错误 Bundler GemNotFound Could not find rake 0 9 2 2 in any of the sourc
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • 如何在 OS X 上的旧版 Safari 中测试我的网站?

    苹果似乎不提供旧版本 Safari 的下载 我什至不确定它们是否会安装在 Mac OS X 上 因为 Safari 似乎是操作系统的一部分 就像 Windows 上的 Internet Explorer 一样 有什么方法可以在旧版本的 Sa
  • Selenium Web 驱动程序如何知道新窗口何时打开,然后恢复执行

    我在使用 Selenium Web 驱动程序自动化 Web 应用程序时遇到问题 该网页有一个按钮 单击该按钮会打开一个新窗口 当我使用以下代码时 它会抛出OpenQA Selenium NoSuchWindowException No wi
  • 使用 Capistrano 无法开始延迟的作业

    我无法使用 capistrano 配方启动延迟的作业流程 这是我收到的错误 usr local lib ruby gems 1 9 1 gems delayed job 2 1 1 lib delayed command rb 62 in
  • Rails 3:f.select - options_for_select

    我的 Ruby on Rails 应用程序上有一个带有下拉菜单的表单 这是我当前的选择选项代码 根据我的理解 当有人打开页面时 这应该将 选择一个 作为默认选项 但如果他们不选择其他选项之一 那么当他们点击提交时会显示错误 在 Safari
  • 在 Rails 5 中结合 API 和 Web 视图

    从 Rails 5 开始 API gem 被合并进来 现在 如果我有 API 可以通过 AJAX 从网页调用 这会给我们留下什么 我正在这里寻找最佳实践 当然 我可以自己使用 JSON 序列化器创建一条路由 然后 就有可能将 API 调用完
  • 在 Windows 中安装 RubyGems

    我是红宝石新手 我尝试按照网站中给出的步骤在我的电脑上安装 Ruby Gemshttp rubygems org pages download http rubygems org pages download 我从上述站点下载了软件包 将目
  • database.yml 的所有可能键是什么

    我刚刚发现reconnect true配置选项可以在database yml文件 还有哪些其他可能的配置选项 是否有所有选项的完整参考 已知的关键示例 default default adapter mysql2 encoding utf8
  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 处理不兼容的字符编码:UTF-8 和 ASCII-8BIT

    我在生产中遇到不兼容的字符编码错误 我尝试在本地重现它 但没有成功 这是错误消息 A ActionView Template Error occurred in controller name action name incompatibl
  • 如何测试哈希函数?

    有没有办法测试哈希函数的质量 我希望在哈希表中使用时具有良好的分布 如果这可以在单元测试中验证 那就太好了 EDIT 为了澄清 我的问题是我已经使用了longJava 中的值的方式是第一个 32 位编码一个 ID 第二个 32 位编码另一个
  • 新分配的序列不起作用

    在 PostgreSQL 中 我创建了一个新表并为其分配了一个新序列id柱子 如果我从 PostgreSQL 控制台插入记录 它可以工作 但是当我尝试从 Rails 导入记录时 它会引发异常 无法找到关联的序列 这是表格 d user me
  • Factory_girl、关联和 after_initialize 的问题

    我有一个这样定义的家庭类 class Family lt ActiveRecord Base after initialize initialize family belongs to user validates user presenc
  • 为什么将 Backbone.js 与 Rails 结合使用? [关闭]

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

    我在现有控制器上创建了一个新页面 我在控制器上添加了 2 个操作方法 prompt user 和 process feedback 所以我通过以下方式进入该页面 redirect to controller gt users action
  • 在 rspec 中打印响应

    我有一个测试无法开始工作 所以我想通过打印响应来调试我的规范 我尝试过使用print response body在我的规范中 但 test log 或控制台中都没有输出 我可能错过了一些东西 我应该尝试什么 Thanks 您可以使用以下方式
  • 将 Rails 应用程序从 3.2.6 升级到 3.2.8

    我有一个使用 Rails 创建的 Rails 应用程序3 2 6 现在3 2 8已经发布了 这就是我更新应用程序所需要做的一切吗 Edit Gemfile 改变线路gem rails 3 2 6 to gem rails 3 2 8 Run

随机推荐

  • Bootstrap 中的开始日期和结束日期

    我正在使用 Bootstrap DatePicker 我要验证从日期 and To Date 开始日期正确选择今天的日期 我有一个问题 迄今为止没有选择开始日期 即从日期值 如何解决它 document ready function fro
  • 从 Pandas DataFrame 创建时间序列

    我有一个具有各种属性的数据框 包括一个日期时间列 我想提取其中一个属性列作为由日期时间列索引的时间序列 这看起来非常简单 我可以用随机值构造时间序列 正如所有 pandas 文档所示 但是当我从数据帧中这样做时 我的属性值全部转换为 NaN
  • 为什么我的 sqlite3 外键不起作用?

    我从 python 解释器运行以下代码 并期望插入语句失败并抛出某种异常 但它没有发生 Python 2 6 5 r265 79096 Mar 19 2010 21 48 26 MSC v 1500 32 bit Intel on win3
  • Google 是否推送了会破坏多个帐户的 OAuth2.0 流程更新?

    直到上周 当我登录 Google 中的多个帐户并调用 OAuth2 0 流程时 我都会看到一个功能正常的丑陋屏幕 看起来像是被丑陋的棍子反复击打 它将显示一个单选按钮列表 其中包含我登录的所有帐户 您选择一个并继续完成流程 这周我现在得到了
  • 使用 -fshort-wchar 的含义

    在 Mac OS X 系统上查看文件 wchar h 时 我发现当未定义 cplusplust 且 wchar t 的最大大小为 2 个字节 通过使用编译器选项 fshort 时 wchar t 相当于 str 函数 例如 wcscpy w
  • 无法膨胀 ConstraintLayout

    每次我的应用程序崩溃时 因为它在类路径中找不到 Landroidx constraintlayout widget R styleable 我尝试重建 使缓存无效 但它总是在运行时给我同样的错误 我尝试了 1 1 2 和 1 1 3 两个版
  • pandas 时间序列的线性回归

    我有一个数据框对象 其中包含 EUR USD 货币对的 1 秒间隔 但理论上它可以是任何间隔 在这种情况下它可能如下所示 2015 11 10 01 00 00 01 00 1 07616 2015 11 10 01 01 00 01 00
  • mat-form-field 必须包含 MatFormFieldControl

    我们正在尝试在我们公司构建我们自己的表单字段组件 我们正在尝试像这样包装材料设计的组件 field
  • 使用数组进行 DocumentDB 查询

    我有带有简单 字符串 数组属性的文档 id one tags A B id two tags A C 要检查值是否是数组的一部分 我可以使用 ARRAY CONTAINS SELECT FROM c WHERE ARRAY CONTAINS
  • 在 Rake 任务中使用环境变量

    task some task environment do t args puts Rails env gt development production etc puts ENV gt end 我设置了一些环境变量 通过本地 env 或通
  • 删除后如何访问 Kubernetes 中 Pod 的日志

    我们拥有基于 CentOS 的 kubernetes 基础设施 并在此基础上使用 Openshift 我们已经终止了一个 Pod 现在它在主控制器上不再可见 但是我们愿意分析它的日志 我们还能访问它的日志吗 如何 当您发出命令时 容器及其日
  • 使用 from_json 制作的 MongoEngine 文档对象不保存

    我正在尝试使用 from json 方法构建文档对象 object save 没有抛出错误 但文档没有插入到 mongo 中 另一方面 如果我通过为每个字段分配值来创建对象 它就可以正常工作 我无法找到原因 下面是这两种情况的代码 from
  • Scala 模块 2.12.3 需要 Jackson Databind 版本 >= 2.12.0 且 < 2.13.0,但我有 databind 2.12.3

    对于一个项目 我将 Spark 结构化流与 kafka 结合使用 我有这个配置
  • 沿线性回归线绘制条件密度曲线“P(Y|X)”

    这是我的数据框 有两列Y 回应 和X 协变量 Editor edit use dat not data dat lt structure list Y c NA 1 793 0 642 1 189 0 823 1 715 1 623 0 9
  • 简单的 Python 服务器设置

    我正在尝试学习 python 来自 PHP 并且想要设置最简单的 Web 服务器 以便我可以开始编码 我找到了集成的 HTTP 服务器 所以我认为这应该是最简单的方法 root ubuntu var py python m SimpleHT
  • 核心数据关系(快速)

    我正在构建一个需要核心数据关系的应用程序 如下所示 entityA lt lt gt entityB e g any given entityA can hold many entityB objects 我有两个带有entityA 列表项
  • 在容器中运行服务(upstart/init.d)

    我正在尝试在 docker 中启动一个具有许多 init 和 upstart 服务的系统 但出现此错误 initctl Unable to connect to Upstart Failed to connect to socket com
  • IntelliJ IDEA 没有 Java 10 'var' 的代码完成?

    最近我安装了IntelliJ IDEA的新版本 2018 1 它增加了对Java 10的支持 但是当我尝试使用var 对于局部变量类型推断 我发现没有var在代码完成列表中 见下面的截图 如果我继续输入 它将适用VarHandle作为该列表
  • 如何对变长特征进行一种热编码?

    给定一个变长特征列表 features f1 f2 f3 f2 f4 f5 f6 f1 f2 其中每个样本都有不同数量的特征和特征dtype is str并且已经一热了 为了使用 sklearn 的特征选择实用程序 我必须将features
  • 确保 gem 与 Rails 3.x 和 4.0 兼容的 gem 测试策略?

    我见过一些虚拟 Rails 应用程序的示例 用于测试 因此它们通常处于测试或规范目录下 与 Appraisals gem 一起使用 据说可以与 Rails 3 x 和 Rails 4 一起使用 但它们看起来很黑客且功能不完整 这在某种程度上