我正在对我多年前写的名为validation_auditor的 gem 进行现代化改造。它有一个创建迁移的 Rails 生成器。它现在与最新的 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'
错误发生在这一行:
active_record = Rails.configuration.generators.active_record
这是安装程序的一部分。
当我在 Rails 项目中运行它时,那条线工作正常,我只是无法让它在测试中工作。
该行的灵感来自 Thoughtbot 的 Clearance,它确实成功地测试了它的生成器:https ://github.com/thoughtbot/clearance/blob/e653b303e152c8af31a5c30c1b9b13a3e36b3716/spec/generators/clearance/install/install_generator_spec.rb#L9
任何想法 Rails 这样做的方式是什么?我试图了解 Clearance 是如何工作的,但是有很多代码要经过,我还没有设法正确理解,我想知道即使 Clearance 是否正确地做到了。