加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为什么我的Rails测试没有看到我的内存中SQLite

发布时间:2020-12-17 02:17:33 所属栏目:百科 来源:网络整理
导读:我正在尝试通过使用SQLite3内存数据库作为应用程序的测试数据库来加速Rails应用程序的测试.我按照 blog post的说明进行操作. 我在database.yml中的数据库配置如下所示: test: adapter: sqlite3 database: ":memory:" encoding: utf8 verbosity: quiet 我还
我正在尝试通过使用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

我的所有测试都失败了,因为无法加载灯具,您可以看到:

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,以查看实际的对象更改.

如果您共享一个连接,您应该得到您期望的行为.

并且更快启动:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读