我已经提到试图进行这种测试的项目(截至2013年3月底),比如less-rails和ember-rails,但是这种使用各种版本的Rails进行测试的方法看起来不是很干净,尝试调试非标准Rails应用程序,特别是在Rails的beta版本中是非常不寻常的.
有一个更清洁的方法来测试,这将是一个更好的方法,允许您有一个完整的Rails应用程序的每个版本的Rails来测试,通过一些魔法是不是很难设置或维护,不需要非标准路径黑客在地方等
使用各种版本的Rails(包括至少最新的Rails 3.1.x,3.2.x和4.0.0.beta1)测试宝石的可用策略是什么?每个的优点和缺点是什么?
解决方法
选项1:评估宝石和单Rails虚拟应用程序
肯·柯林斯提到使用评估和一个Rails“虚拟”应用程序:
I test minitest-spec-rails against 3.0,3.1,3,2 and 4.0 using a mix
of appraisal and dummy_app that minimally configures itself depending
which rails version it is testing against. Some links:07001
07002
less-rails,ember-rails和high_voltage等使用类似的技术.
我在restful_json(v3.3.0)中使用了类似于high_voltage的设置,但是使用4.0.0-beta1创建的完整的Rails应用程序,我最低限度修改也可以使用Rails 3.1.x / 3.2.x.
更新:可能希望看到permitters更多的例子.
优点:相当简单可以根据命令行等各种Rails版本进行测试.可以非常少的Rails应用程序配置,或者可以使用完整的Rails应用程序,具有微小的差异.
缺点:对于多个Rails版本,仍然使用相同的Rails应用程序,因此有些条件和不必要的配置. (某些文件不适用于其他版本的Rails等的可能问题,但似乎不是一个大问题.)
选项2:Rails版本作为环境变量,具有单个Gemfile,单Rails虚拟应用程序,依靠travis-ci在多个版本中进行测试
史蒂夫·克拉夫尼克(Steve Klabnik)提到了一个解决方案,它使用一个完整的Rails应用程序(即使在“虚拟”目录下),也没有使用评估宝石,依靠travis-ci来测试:
I’ve been meaning to discuss this topic more,as I’ve been doing it
for a bunch of my gems lately. I have two that do this:Draper: 07009
LocaleSetter: 070010
Basically,I embed an entire Rails application into the gem,and then
run it against multiple versions of Rails on travis via env vars.
优点:简单.没有依赖评估宝石(不是这是一个问题,但可能更容易维护).
缺点:仍然重复使用相同的Rails应用程序为多个Rails版本从我可以告诉.除非使用travis-ci或以干净的gemset开头的东西(例如,如果在命令行中运行),那么当前没有区别的gemsets,所以较新的gem可能与旧的Rails等一起使用,但Steve说如果这是一个问题你可以把钥匙和钥匙重新捆绑起来.