gpt4 book ai didi

ruby-on-rails - 为什么我的 Rails 测试看不到内存中 SQLite3 数据库的内容?

转载 作者:行者123 更新时间:2023-11-28 19:53:20 25 4
gpt4 key购买 nike

我试图通过使用 SQLite3 内存数据库作为应用程序的测试数据库来加速 Rails 应用程序的测试。我已按照此 blog post 中的说明进行操作.

我在 database.yml 中的数据库配置如下所示:

test:
adapter: sqlite3
database: ":memory:"
encoding: utf8
verbosity: quiet

我还按照建议创建了初始化器:

def in_memory_database?
Rails.env == "test" and
ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLiteAdapter ||
ActiveRecord::Base.connection.class == ActiveRecord::ConnectionAdapters::SQLite3Adapter and
Rails.configuration.database_configuration['test']['database'] == ':memory:'
end

if in_memory_database?
ActiveRecord::Schema.verbose = false
puts "creating sqlite in memory database"
load "#{Rails.root}/db/schema.rb"
end

我所有的测试都失败了,因为无法加载 fixture,如您所见:

creating sqlite in memory database
Loaded suite test/unit/vendor_appliance_test
Started
E
Finished in 0.070079 seconds.

1) Error:
test_the_truth(VendorApplianceTest):
ActiveRecord::StatementInvalid: Could not find table 'advertisers'


1 tests, 0 assertions, 0 failures, 1 errors

初始化程序确实加载了数据库(正如您从输出的第一行中看到的那样),但是由于某种原因,模式对测试不可见,因为它在错误的位置查找或者因为它已被删除到测试开始时。

有人以前见过这个吗?

最佳答案

看看这个关于共享连接的内容:

http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/

sqllite 维护每个连接的内存数据库。事件记录使用连接池,当您运行测试时它使用不同的连接。您可以在不同点检查连接的对象 ID,以查看实际的对象更改。

如果您共享单个连接,您应该会得到预期的行为。

并且启动速度更快:-)

关于ruby-on-rails - 为什么我的 Rails 测试看不到内存中 SQLite3 数据库的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895662/

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