如何使用ruby-on-rails fixture来设置不属于rails应用程序DB的(外部)数据



根据我的要求,我已经为一些数据创建了查询外部数据库(不同于rails应用程序使用的数据库)的模型。

我正试图围绕这些模型编写测试,并希望将"样本测试数据"与实际测试分开。

我以为我可以把数据放在一个yml文件,并加载到一个哈希,但它确实工作:(

  • 将样例测试数据添加到fixture文件名'external_database.yml'
  • 在测试文件中设置下面的代码

ext_data = YAML.load_file(Rails.root.to_s + "/test/fixtures/ext_data.yml")

  • 但是我被下面的错误卡住了

1) Error: test_should_errorout_for_invalid_market_zip(ExtDBTest): ActiveRecord::StatementInvalid: Mysql::Error: Table 'rails_app_db.ext_data' doesn't exist: DELETE FROM ext_data

  1. 做我想做的事的最好方法是什么?

我猜您的问题是该外部数据库的模式不包含在您的模式中。rb文件和/或迁移。它们用于在运行测试之前设置测试数据库。

因此,尝试将这些fixture写入不存在的表中-结果如上面所示。

单元测试中的多个数据库连接通常很麻烦。考虑为外部依赖项的数据创建一个sqlite文件,并配置您的测试环境来使用这个文件——或者它的一个副本,以防您需要更改数据。

最新更新