我需要定位实现我想要构建的gem的测试。这是一个小宝石,为ActiveRecord::Base
添加了一个新的类方法。这个新方法将在demmand上执行一些SQL。
麻烦的是,要执行的SQL取决于数据库后端。它与SQLite,Postgres和MySQL不同。所有数据库后端的ruby方法签名都是相同的 - 只有SQL更改。
那么,我该如何进行测试?
澄清一下:我知道如何询问ActiveRecord“你在使用什么数据库后端?”。我需要的是告诉RSpec / Minitest / TestUnit“将数据库后端更改为Postgres,并再次尝试所有测试。然后MySQL”。
答案 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
我估计如果你想获得最好的报道,这是一个很好的方法。如果你想有选择地为测试的不同部分测试不同的东西,你只需要使用条件,但(一般来说)我认为测试中的条件是一件坏事。