首页 文章

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

提问于
浏览
1

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

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

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

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

1 回答

  • 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
    

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

相关问题