【问题标题】:Testing different database backends on a rails gem在 rails gem 上测试不同的数据库后端
【发布时间】:2011-11-16 22:03:52
【问题描述】:

我需要定向实施我想要构建的 gem 的测试。这是一个向ActiveRecord::Base 添加新类方法的小宝石。这种新方法将按需执行一些 SQL。

问题是,要执行的 SQL 取决于数据库后端。 SQLite、Postgres 和 MySQL 是不同的。所有数据库后端的 ruby​​ 方法签名都是相同的——只有 SQL 发生了变化。

那么,我该如何做这个测试呢?

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

【问题讨论】:

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


    【解决方案1】:

    看看DataMapperdoesthis是怎么做到的。他们在运行规范时传递了一个环境变量ADAPTER,这会改变捆绑器安装/加载的gem,并更改规范助手中的连接设置。您应该能够做类似的事情,基本上为每个可能的数据库后端运行一次完整的套件。

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

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

    我认为如果您想获得最佳覆盖率,这是一个好方法。如果您想为测试的不同部分选择性地测试不同的东西,您只需要使用条件,尽管(通常)我认为测试中的条件是一件坏事。

    【讨论】:

    • 哇。我希望我不必碰捆绑器。 ruby 代码是相同的,因此不需要条件。无论如何+1。
    猜你喜欢
    • 2021-09-16
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2019-08-12
    • 2023-01-11
    相关资源
    最近更新 更多