【问题标题】:Rails testing with out-of-process database access?使用进程外数据库访问进行 Rails 测试?
【发布时间】:2009-01-13 06:19:57
【问题描述】:

我正在构建一个 Rails 应用程序,它需要一些模型来与一些必要的 Java 库进行交互。为此,我想在 MRI 上使用 Rails,而不是 JRuby 或 RBJ。 Java 代码只需要对 Rails 应用程序管理的数据库表的读取权限。

一种方法是设置一个读取 Rails 应用程序数据库表的 Servlet。

问题在于,在测试期间,使用 Rails 事务性固定装置会使所有数据库活动测试invisible to external processes,例如 Servlet。

对于部署来说,这不是问题,但目前还不清楚如何在这些条件下进行自动化测试。

如何使用 RSpec 测试依赖于外部进程的 Rails 模型,这些进程可以访问 Rails 管理的表?

【问题讨论】:

    标签: java ruby-on-rails servlets transactions rspec


    【解决方案1】:

    关闭事务性装置,数据库写入应该对外部进程可见。在您想要使用 put 执行此操作的测试类中:

    self.use_transactional_fixtures = false
    

    如果您希望它适用于所有内容,请将其放入 test/test_helper.rb。请注意,您的测试可能会运行得更慢,因为所有内容实际上都在访问数据库。

    【讨论】:

    • 谢谢。不利的一面似乎是在每次测试运行之前数据库不再被清除。我可以在 before(:each) 中手动清除它。我真的很喜欢自动化程度更高的东西。有没有其他方法可以解决这个问题?
    • 如果您依赖数据在外部可见,那么,没有其他方法。每次运行后,您都必须清除并重新实例化您的固定装置。您可以通过将fixtures :model1, :model2, ... 添加到您的测试类来完成此操作,而无需编写额外的代码。
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2015-09-07
    • 2011-02-16
    • 2019-04-18
    • 2011-06-02
    • 2013-09-01
    • 2022-08-02
    相关资源
    最近更新 更多