在rails gem上测试不同的数据库后端

时间:2011-11-16 22:03:53

标签: ruby-on-rails testing activerecord rspec tdd

我需要定位实现我想要构建的gem的测试。这是一个小宝石,为ActiveRecord::Base添加了一个新的类方法。这个新方法将在demmand上执行一些SQL。

麻烦的是,要执行的SQL取决于数据库后端。它与SQLite,Postgres和MySQL不同。所有数据库后端的ruby方法签名都是相同的 - 只有SQL更改。

那么,我该如何进行测试?

澄清一下:我知道如何询问ActiveRecord“你在使用什么数据库后端?”。我需要的是告诉RSpec / Minitest / TestUnit“将数据库后端更改为Postgres,并再次尝试所有测试。然后MySQL”。

1 个答案:

答案 0 :(得分:2)

了解DataMapper does this的方式。它们在运行规范时传递环境变量ADAPTER,这会改变由bundler安装/加载的gem并更改spec helper中的连接设置。您应该可以执行类似的操作,基本上为每个可能的数据库后端运行一次完整套件。

当您运行DM核心规范时,它看起来像这样:

ADAPTER=mysql bundle install
ADAPTER=mysql bundle exec spec spec

ADAPTER=sqlite bundle install
ADAPTER=sqlite bundle exec rspec spec

我估计如果你想获得最好的报道,这是一个很好的方法。如果你想有选择地为测试的不同部分测试不同的东西,你只需要使用条件,但(一般来说)我认为测试中的条件是一件坏事。