【问题标题】:Create a table before loading fixtures into rails test environment在将夹具加载到 Rails 测试环境之前创建一个表
【发布时间】:2021-07-24 02:33:04
【问题描述】:

表的 db 架构之一指定其在列上的分区。 由于在测试开始之前加载了固定装置,因此 INSERT 语句将失败,因为分区表不存在。 我试过了

class ActiveSupport::TestCase
  self.use_transactional_tests = false
  fixtures :fixture_file
  setup :setup

  def setup
     ActiveRecord::Base.connection.execute("CREATE TABLE table_1 PARTITION OF table ..")
  end

这似乎失败了,因为在调用设置之前加载了固定装置。 有没有办法在加载夹具之前调用设置?

【问题讨论】:

  • 所以您希望您的测试数据库结构不同于您的开发/生产数据库结构?
  • @Lam Pham 不,我的问题是,如何运行创建分区表的设置方法,然后为测试数据库执行加载夹具?现在,尽管在测试类中有一个 setup 方法,但是在创建分区表之前就已经加载了fixture。
  • 对不起,我还是不明白你的意思,为什么你需要创建partition tables?您是否关心性能(在测试中?)或其他什么?
  • @LamPhan 当我运行一些测试时,没有插入固定装置,因为表抛出“没有为行找到关系分区”错误。所以我必须在安装过程中创建分区表,然后加载固定装置以克服错误。在拆卸过程中,我只是放下桌子。您如何看待这种方法?

标签: ruby-on-rails minitest


【解决方案1】:

我不知道可以有选择地将夹具加载到测试类中。 test_helper.rb

class ActiveSupport::TestCase
  fixtures :A, :B
end

而在测试类中,我想首先创建一个分区表,然后加载固定装置,我尝试了

class ApiTest < ActionDispatch::IntegrationTest
  def setup
    ActiveRecord::Base.connection.execute("CREATE TABLE IF NOT EXISTS table_1 PARTITION OF table FOR VALUES IN (1)")
    ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'table_fixture_file')
  end

  def teardown
    ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS table_1")
  end

end

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多