一些选项来自相关主题在 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 说这是否会导致问题,您只需吹掉锁并重新捆绑即可。