宝石测试的策略,以确保宝石与Rails 3.x和4.0一起使用?

Gar*_*ver 10 testing gem ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我已经看到了一些虚拟Rails应用程序的例子(用于测试,因此它们通常在测试或规范下),与Appraisals宝石一起使用,据说可以与Rails 3.x和Rails 4一起使用,但它们看起来很像hackish功能不全.这是一个有点预期,因为它是一个剥离的弗兰肯斯坦怪物试图兼容各种版本的Rails 3以及Rails 4.

我已经提到了试图进行这种测试的项目(截至2013年3月下旬),比如less-rails和ember-rails,但这种用各种版本的Rails测试的方式看起来不是很干净,而且它是尝试调试非标准的Rails应用程序是非常重要的,特别是在测试版的Rails中.

如果有一个更清晰的测试方法可以让你拥有一个完整的Rails应用程序来为每个版本的Rails进行测试,通过一些魔法来设置或维护并不困难并且不需要非标准的路径攻击在某些地方等

有各种版本的Rails测试宝石的可用策略是什么(至少包括最新的Rails 3.1.x,3.2.x和4.0.0.beta1),每种版本的优缺点是什么?

Gar*_*ver 4

Rails-core 列表中相关线程的一些选项:

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

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

我使用评估和 dummy_app 的组合来针对 3.0、3.1、3,2 和 4.0 测试 minitest-spec-rails,dummy_app 会根据测试的 Rails 版本进行最低程度的自我配置。一些链接:

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

类似的技术也用于less-railsember-railshigh_Voltage等。

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

更新:可能想查看许可者以获取最新的示例。

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

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

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

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

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

德雷珀: https: //github.com/drapergem/draper

LocaleSetter:https://github.com/jcasimir/locale_setter/

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

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

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