123456789_123456789_123456789_123456789_123456789_

Module: Rails::Generators::Testing::Behavior

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: railties/lib/rails/generators/testing/behavior.rb

Class Method Summary

::ActiveSupport::Concern - Extended

class_methods

Define class methods from given block.

included

Evaluate given block in context of base class, so that you can write class macros here.

prepended

Evaluate given block in context of base class, so that you can write class macros here.

Instance Method Summary

DSL Calls

included

[ GitHub ]


18
19
20
21
22
23
24
25
# File 'railties/lib/rails/generators/testing/behavior.rb', line 18

included do
  # Generators frequently change the current path using FileUtils.cd.
  # So we need to store the path at file load and revert back to it after each test.
  class_attribute :current_path, default: File.expand_path(Dir.pwd)
  class_attribute :default_arguments, default: []
  class_attribute :destination_root
  class_attribute :generator_class
end

Instance Method Details

#create_generated_attribute(attribute_type, name = "test", index = nil)

Create a ::Rails::Generators::GeneratedAttribute by supplying the attribute type and, optionally, the attribute name:

create_generated_attribute(:string, "name")
[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 89

def create_generated_attribute(attribute_type, name = "test", index = nil)
  Rails::Generators::GeneratedAttribute.parse([name, attribute_type, index].compact.join(":"))
end

#generator(args = default_arguments, options = {}, config = {})

Instantiate the generator.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 81

def generator(args = default_arguments, options = {}, config = {})
  @generator ||= generator_class.new(args, options, config.reverse_merge(destination_root: destination_root))
end

#prepare_destination (private)

Clears all files and directories in destination.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 103

def prepare_destination # :doc:
  rm_rf(destination_root)
  mkdir_p(destination_root)
end

#run_generator(args = default_arguments, config = {})

Runs the generator configured for this class. The first argument is an array like command line arguments:

class AppGeneratorTest < Rails::Generators::TestCase
  tests AppGenerator
  destination File.expand_path("../tmp", __dir__)
  setup :prepare_destination

  test "database.yml is not created when skipping Active Record" do
    run_generator %w(myapp --skip-active-record)
    assert_no_file "config/database.yml"
  end
end

You can provide a configuration hash as second argument. This method returns the output printed by the generator.

[ GitHub ]

  
# File 'railties/lib/rails/generators/testing/behavior.rb', line 67

def run_generator(args = default_arguments, config = {})
  args += ["--skip-bundle"] unless args.include?("--no-skip-bundle") || args.include?("--dev")
  args += ["--skip-bootsnap"] unless args.include?("--no-skip-bootsnap") || args.include?("--skip-bootsnap")

  if ENV["RAILS_LOG_TO_STDOUT"] == "true"
    generator_class.start(args, config.reverse_merge(destination_root: destination_root))
  else
    capture(:stdout) do
      generator_class.start(args, config.reverse_merge(destination_root: destination_root))
    end
  end
end