针对来自外部数据库的数据进行Rspec测试

时间:2012-01-04 23:03:34

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

我目前正在为Rails 2.3应用程序创建rspec测试用例。我遇到的问题是应用程序依赖于来自外部数据库的数据,如下所示:

  • Main_User是一个外部应用程序。

  • Node_User是我正在测试的应用程序。

当创建新的Node_User时,Node_User调用Main_User创建一个用户并返回一些Node_User用来创建Node_User的数据。

有什么方法可以查询Main_User数据库来验证在那里创建的记录是否包含传递给Node_User的数据?或者有更好的方法来测试它吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,如果您有权访问该数据库的user / pass / hostname,理论上您可以查询远程数据库。 (搜索“Rails多个数据库”。)

但我不一定建议采用这种方法。您的测试将修改远程数据库的状态。这让我觉得不安全。如果您的测试执行任何大量删除或执行损坏的功能,您将创建虚假记录 - 并可能删除或损坏数据。换句话说,您的测试可能会对生产数据库造成不良影响。

因此,我建议以某种方式模拟远程数据库。一个选项是VCR。这真的很酷,但它需要你至少在远程数据库上操作一次,因为它必须记录第一次运行。另一种选择是使用VCR底层工具之一,例如FakeWeb。

当然,这只测试Node_User方面的事情。您说您还需要验证远程记录是否正确。为此,我建议在Main_User端编写测试。此类测试将模拟来自Node_User的传入RESTful请求并验证正确的结果。

仅当Main_User是您的应用程序时才有效。如果它是第三方服务,那么可能没有一种安全的方法来测试它。你可能只需要相信它的正确性。