如何使用 ruby-on-rails 固定装置设置不属于 Rails 应用程序数据库的(外部)数据?
根据我的要求,我创建了用于查询某些数据的外部数据库(与 Rails 应用程序使用的数据库不同)的模型。
我正在尝试围绕这些模型编写测试,并希望将“样本测试数据”与实际测试分开。
我以为我可以将数据放入 yml 文件并将其加载到哈希中,但它确实有效:(
- 将示例测试数据添加到固定文件名“external_database.yml”
- 将以下代码放入设置中的测试文件中
<代码> ext_data = YAML.load_file(Rails.root.to_s + "/test/fixtures/ext_data.yml")
- 但我遇到了以下错误
1)错误: test_should_errorout_for_invalid_market_zip(ExtDBTest): ActiveRecord::StatementInvalid: Mysql::Error: 表“rails_app_db.ext_data”不存在:从
ext_data
中删除
- 做我想做的事情的最佳方法是什么?
Per my requirements, I have created models for querying external database (different from the one that the rails app uses) for some of the data.
I am trying to write tests around these models and want to separate the "sample test data" from the actual tests.
I thought I could put the data in a yml file and load it into a hash, but it did work out :(
- Added sample test data to a fixture file name 'external_database.yml'
- Put the below code in setup, in the test file
ext_data = YAML.load_file(Rails.root.to_s + "/test/fixtures/ext_data.yml")
- But I am stuck with the below error
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
- What is the best way to do what I want done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想您的问题是该外部数据库的架构不包含在您的 schema.rb 文件和/或迁移中。这些用于在运行测试之前设置测试数据库。
因此,尝试将这些装置写入不存在的表中 - 其结果如上所示。
单元测试中的多个数据库连接通常很痛苦。考虑为外部依赖项的数据创建一个 sqlite 文件,并配置您的测试环境以使用该文件或它的副本,以防您需要更改数据。
I guess your problem is that the schema of that external database is not contained in your schema.rb-file and/or migrations. These are used to setup your test-database before you run the tests.
So the attempt is made to write those fixtures into non-existing tables - with the result you see above.
Multiple database-connections in unit tests are generally a pain. Consider creating an sqlite-file for the data of the external dependencies and configure your test-environment to use this file - or a copy of it, in case you need to mutate data.