Rails.configuration.generators.active_record 在测试期间是如何设置的?

问题描述

我正在对我多年前编写的名为 validation_auditor 的 gem 进行现代化改造。它有一个 Rails generator that creates a migration。它现在可以很好地与最新的 Rails 配合使用,但我在测试它时遇到了麻烦。我有一个非常简单的测试:

require_relative "test_helper"

require "generators/validation_auditor/install_generator"

class InstallGeneratorTest < ::Rails::Generators::TestCase
  tests ValidationAuditor::InstallGenerator
  destination File.expand_path("../tmp",File.dirname(__FILE__))

  setup :prepare_destination

  test "generate migration" do
    run_generator
  end
end

当我运行它时,它会抛出这个错误

ERROR InstallGeneratorTest#test_generate_migration (0.00s)
Minitest::UnexpectedError:         NoMethodError: undefined method `config' for nil:NilClass
            /home/pupeno/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/railties-6.1.3/lib/rails.rb:47:in `configuration'
            /home/pupeno/validation_auditor/lib/generators/validation_auditor/install_generator.rb:38:in `migration_primary_key_type_string'
            (erb):8:in `migration_template'

错误发生在 this line

active_record = Rails.configuration.generators.active_record

这是安装程序的一部分。

当我在 Rails 项目中运行该行时,该行工作正常,我只是在测试中无法使其正常工作。

那个 line was inspired by Thoughtbot's Clearance,它成功地测试了它的生成器:https://github.com/thoughtbot/clearance/blob/e653b303e152c8af31a5c30c1b9b13a3e36b3716/spec/generators/clearance/install/install_generator_spec.rb#L9

任何想法 Rails 这样做的方法是什么?我试图了解 Clearance 是如何工作的,但有很多代码需要处理,我还没有设法正确理解,我想知道 Clearance 是否也能正确执行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)