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

5
我正在尝试通过将SQLite3内存数据库用作应用程序的测试数据库来加速Rails应用程序的测试。我按照这篇博客文章中的说明进行操作。
在我的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

初始化程序确实加载了数据库(如您可以从输出的第一行看到的那样),但由于某种原因,测试无法看到模式,可能是因为它正在查找错误的位置或者因为在测试开始时已经被清除。
有人以前见过这种情况吗?
2个回答

2

1

只需将以下代码放入test_helper.rb文件中

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接