【问题标题】:Rspec testing against local DB针对本地数据库的 Rspec 测试
【发布时间】:2016-07-24 17:49:41
【问题描述】:

我目前正在运行一个应用程序,该应用程序使用 Ruby 2.1.4 和 MySQL2 gem 将数据从 API 移动到 MySQL 数据库中。

我正在尝试为此应用程序创建 RSPEC 测试,但问题是该应用程序主要是 MySQL 查询,我不想模拟查询调用,因为我想测试我的查询以确保它们按预期工作.

我尝试通过在本地运行 rspec 时将客户端更改为 sqlite3 gem 来做到这一点,但问题是 SQLite3 和 MySQL2 处理查询的方式不同。 (Mysql2 使用 Client.query,而 SQLite 使用 Client.execute)。

我正在尝试模拟 rails + rspec 它如何在本地使用 sqlite 但远程使用 mysql。

如何在无需启动外部服务器的情况下在本地执行此操作? 我是否需要使用 ActiveRecord 或者有什么方法可以创建一个 CSV 文件,我可以将其传递给我在应用程序开始时创建的 MySQL 客户端?

感谢您提供的任何帮助或您对如何调整解决此问题的方法提出的任何建议。代码片段如下:

RSPEC 测试 RSPEC test

Ruby 应用程序 Ruby Application

【问题讨论】:

    标签: mysql ruby-on-rails ruby sqlite rspec


    【解决方案1】:

    与其尝试在方孔中安装圆钉,为什么不在您的测试环境中完全使用 MySQL? sqlite3 并不总是准确地模拟 MySQL,因此您可能只需在本地机器上设置和使用 MySQL 就可以获得更可靠的测试。您可能会发现您的测试也可能运行得更快。

    就我个人而言,我总是针对我在生产中运行的同一类型的数据库进行测试,以避免出现您所描述的问题。

    【讨论】:

    • @Anythony E - 所以我想过这样做,但设置一个 sqlite 数据库似乎比设置一个 mysql 数据库容易得多(我假设我可以根据我在 rails 的经验来互换使用它们)。 sqlite 的另一个优点是我可以在源代码中包含 test.db 文件,这样任何人都可以运行 rspec,而无需在 gems 之外安装任何其他先决条件。而如果我用 mysql 来做,任何想要对代码运行测试的用户都必须在他们的机器上本地运行 mysql 服务器。除非有一种方法可以在本地设置我缺少的 mysql?
    • 是的,但收益远大于成本。设置 sqlite 更容易,但更难集成和管理,因为 sqlite 和 MySQL 之间存在许多差异,并且您最终会在 prod 中遇到您没有预料到的错误,因为您的测试套件没有选择它们。在本地设置和运行 MySQL 也不应该是非常困难的。您不需要签入test.db 进行源代码控制,因为无论如何您的测试都应该始终从空白状态运行。
    • 我继续按照您建议的方式运行它 - 总体而言非常简单,没有我预期的那么困难。不过,我感谢您的帮助!
    • 很高兴它有帮助!从长远来看,它将为您节省时间和精力。我已经完全停止使用 sqlite 进行测试,并且从未错过它。 :)
    • 在与一些同事交谈后,他们建议另一种方法是使用活动记录并像 rails 一样设置 Database.yml,这样您就可以与数据库更加分离。缺点是您必须像 rails 一样创建模型以正确反映数据库。我相信这对于我的简单应用程序来说是多余的,但它本来是我可以采取的另一条路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多