Mysql 针对本地数据库的Rspec测试

Mysql 针对本地数据库的Rspec测试,mysql,ruby-on-rails,ruby,sqlite,rspec,Mysql,Ruby On Rails,Ruby,Sqlite,Rspec,我目前正在运行一个应用程序,该应用程序使用Ruby 2.1.4和MySQL2 gem将数据从API移动到MySQL数据库 我试图为这个应用程序创建RSPEC测试,但问题是这个应用程序主要是MySQL查询,我不想模拟查询调用,因为我想测试我的查询以确保它们按预期工作 我曾尝试在本地运行rspec时将客户端更改为sqlite3 gem,但问题是sqlite3和MySQL2处理查询的方式不同。(Mysql2使用Client.query,而SQLite使用Client.execute) 我正试图模仿ra

我目前正在运行一个应用程序,该应用程序使用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试验

Ruby应用程序

与其尝试在方孔中安装一个圆钉,为什么不在测试环境中完全使用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进行测试,并且从未错过它。:)在与一些同事讨论后,他们建议另一种方法是使用active record并设置Database.yml,就像rails那样,这样可以使您与数据库更加分离。缺点是您必须像rails一样创建模型来正确反映数据库。我相信这对于我的简单应用程序来说是过分的,但这将是我本可以采取的另一种方法。