diff --git a/lib/generators/rspec/generators/generator_generator.rb b/lib/generators/rspec/generators/generator_generator.rb new file mode 100644 index 0000000000..7ce9806c41 --- /dev/null +++ b/lib/generators/rspec/generators/generator_generator.rb @@ -0,0 +1,24 @@ +require 'generators/rspec' + +module Rspec + module Generators + # @private + class GeneratorsGenerator < Base + class_option :generator_specs, :type => :boolean, :default => false, :desc => "Generate generator specs" + + def generate_generator_spec + return unless options[:generator_specs] + + template template_name, File.join('spec/generator', class_path, filename) + end + + def template_name + 'generator_spec.rb' + end + + def filename + "#{table_name}_generator_spec.rb" + end + end + end +end diff --git a/lib/generators/rspec/generators/templates/generator_spec.rb b/lib/generators/rspec/generators/templates/generator_spec.rb new file mode 100644 index 0000000000..146713908d --- /dev/null +++ b/lib/generators/rspec/generators/templates/generator_spec.rb @@ -0,0 +1,6 @@ +require 'rails_helper' + +RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:generator) %> do + + pending "add some scenarios (or delete) #{__FILE__}" +end diff --git a/spec/generators/rspec/generators/generator_generator_spec.rb b/spec/generators/rspec/generators/generator_generator_spec.rb new file mode 100644 index 0000000000..0fc6df5a8e --- /dev/null +++ b/spec/generators/rspec/generators/generator_generator_spec.rb @@ -0,0 +1,35 @@ +require 'generators/rspec/generators/generator_generator' +require 'support/generators' + +RSpec.describe Rspec::Generators::GeneratorsGenerator, :type => :generator do + setup_default_destination + + describe "generator specs" do + subject(:generator_spec) { file("spec/generator/posts_generator_spec.rb") } + describe "are generated independently/can be generated" do + before do + run_generator %w(posts --generator-specs) + end + it "creates the spec file" do + expect(generator_spec).to exist + end + it "contains 'rails_helper in the spec file'" do + expect(generator_spec).to contain(/require 'rails_helper'/) + end + it "includes the generator type in the metadata" do + expect(generator_spec).to contain(/^RSpec.describe \"Posts\", #{type_metatag(:generator)}/) + end + end + + describe "are not generated/are skipped by default" do + before do + run_generator %w(posts) + end + describe "the spec" do + it "does not exist" do + expect(generator_spec).to_not exist + end + end + end + end +end