gpt4 book ai didi

ruby-on-rails - Rails 和针对旧数据库的测试

转载 作者:行者123 更新时间:2023-12-04 05:46:24 26 4
gpt4 key购买 nike

全部,

有点技术上的束缚。

我已经构建了一个不错的小 Rails 应用程序,它依赖于一些外部数据库(未在本地迁移中定义)来增加核心应用程序信息。我正在坐下来编写一些测试,但发现自己正在为支持这些外部数据的正确解决方案而苦苦挣扎。

例如,假设我的新/当前 Rails 应用程序中有一个“DailyWidgetViews”模型。在表级别,它看起来像:

id, widget_id, date, views, timestamps

假设小部件存在于不同的数据库中。在 Rails 中存在可以很好地处理这种情况的工具。例如,在定义 Widget 时,您可以执行以下操作:
class Widget << ActiveRecord::Base
establish_connection("some_legacy_db_name")
set_table_name :crazy_widget_table_name

现在在 DailyWidgetViews 中,我可以建立一个很好的belongs_to 关联,一切都很好。

但是,到了测试的时候怎么办???

假设我有一个 DailyWidgetViews 资源并且想要测试/index 操作并返回每个 DailyWidgetView 的 Widget 关联。定义此外部数据并与之交互的推荐策略是什么?即使我模拟了所有内容, test:unit 和 rspec 也希望在测试数据库中找到 Widget 的定义。此外,应用程序中的一些缓存优化也希望在应用程序加载时在这里找到一些数据(它可以是空的)。

我看到的一些潜在选择:
  • 构建一个仅包含迁移的单独项目。这些迁移具有支持遗留模式的最低限度。在需要时运行此项目以获取架构设置。模拟测试中的所有内容,以便我们永远不会与此数据库进行交互。
  • 在测试运行之前,导出旧模式和 hack db:setup 以将模式加载到相应的测试数据库中。模拟#1 中的所有内容。

  • 我倾向于选项#1,但希望之前有人处理过这个问题。任何人?

    提前致谢!

    最佳答案

    要让 rake db:test:prepare 做正确的事情,您真正需要做的就是将正确的模式放入 schema.rb 文件中。

    因此,如果您想让该文件正确无误,您有几个选择 - 可能更多,但我想到了这些。

  • 只需手动编辑您需要的架构信息。我不建议这样做,因为如果您需要在 dev/prod 中从头开始运行迁移,此文件将被更改。
  • 创建迁移以设置您需要存在的表,然后仅依赖环境中的 RAILS_ENV 和应用程序中的 Rails.env 来处理将其指向正确的数据库。
  • 关于ruby-on-rails - Rails 和针对旧数据库的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423632/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com