我需要定位实现gem的测试我是一个小的gem,它为 ActiveRecord::Base
添加了一个新的类方法 . 这个新方法将在demmand上执行一些SQL .
麻烦的是,要执行的SQL取决于数据库后端 . 它与SQLite,Postgres和MySQL不同 . 所有数据库后端的ruby方法签名都是相同的 - 只有SQL更改 .
那么,我该如何进行测试呢?
澄清一下:我知道如何向ActiveRecord询问“你在使用什么数据库后端?” . 我需要的是一种告诉RSpec / Minitest / TestUnit“将数据库后端更改为Postgres,并再次尝试所有测试 . 然后再使用MySQL”的方法 .
1 回答
看看如何DataMapper does this . 它们在运行规范时传递环境变量
ADAPTER
,这会改变由bundler安装/加载的gem并更改spec helper中的连接设置 . 您应该可以执行类似的操作,基本上为每个可能的数据库后端运行一次完整套件 .当您运行DM核心规范时,它看起来像这样:
我想如果你想获得最好的报道,这是一个很好的方法 . 如果你想有选择地为测试的不同部分测试不同的东西,你只需要使用条件,但(一般来说)我认为测试中的条件是一件坏事 .