运行 加载夹具后的代码

Run code after fixtures loading

我将 Rails 5.1 与 Minitest 和 Searchkick gem 一起使用,在我的系统测试中,我需要在 ElasticSearch 中为数据编制索引以确保测试通过。

如果我添加断点并检查

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all
  require 'pry'; binding.pry

  # Add more helper methods to be used by all tests here...
end

我所有的模型都有零记录,假设我用以下方法重新创建了数据库: rails db:drop db:create db:migrate

那么加载fixtures后如何得到代码Model.reindex 运行?

注意:我可以使用 setup,但那样我会在每次测试前对所有需要的模型进行重新索引,从而增加时间。

您可以像这样在设置方法中使用 class 变量:

class SomeTest
  setup do
    @@once ||= Model.reindex
  end
end

我在 CI 服务器上遇到了同样的问题。我通过在 运行 测试之前预加载测试数据库来修复它。

bin/rails db:fixtures:load

(来源:https://api.rubyonrails.org/v5.1.0/classes/ActiveRecord/FixtureSet.html