diff --git a/features/generator_specs/generator_specs.feature b/features/generator_specs/generator_specs.feature new file mode 100644 index 0000000000..3a8e6d8360 --- /dev/null +++ b/features/generator_specs/generator_specs.feature @@ -0,0 +1,16 @@ +Feature: Generator spec + + RSpec spec(s) can be generated when generating application components. For instance, `rails generate model` will also generate an RSpec spec file for the model but you can also write your own generator. See [customizing your workflow](https://guides.rubyonrails.org/generators.html#customizing-your-workflow) + + Scenario: Use custom generator + When I run `bundle exec rails generate generator my_generator` + Then the features should pass + Then the output should contain: + """ + create lib/generators/my_generator + create lib/generators/my_generator/my_generator_generator.rb + create lib/generators/my_generator/USAGE + create lib/generators/my_generator/templates + invoke rspec + create spec/generator/my_generators_generator_spec.rb + """ diff --git a/lib/generators/rspec/generators/generator_generator.rb b/lib/generators/rspec/generator/generator_generator.rb similarity index 74% rename from lib/generators/rspec/generators/generator_generator.rb rename to lib/generators/rspec/generator/generator_generator.rb index 0b55fccc45..9d73d2ddc5 100644 --- a/lib/generators/rspec/generators/generator_generator.rb +++ b/lib/generators/rspec/generator/generator_generator.rb @@ -3,8 +3,8 @@ module Rspec module Generators # @private - class GeneratorsGenerator < Base - class_option :generator_specs, type: :boolean, default: false, desc: "Generate generator specs" + class GeneratorGenerator < Base + class_option :generator_specs, type: :boolean, default: true, desc: "Generate generator specs" def generate_generator_spec return unless options[:generator_specs] diff --git a/lib/generators/rspec/generators/templates/generator_spec.rb b/lib/generators/rspec/generator/templates/generator_spec.rb similarity index 100% rename from lib/generators/rspec/generators/templates/generator_spec.rb rename to lib/generators/rspec/generator/templates/generator_spec.rb diff --git a/spec/generators/rspec/generator/generator_generator_spec.rb b/spec/generators/rspec/generator/generator_generator_spec.rb new file mode 100644 index 0000000000..ec1c3965ec --- /dev/null +++ b/spec/generators/rspec/generator/generator_generator_spec.rb @@ -0,0 +1,22 @@ +require 'generators/rspec/generator/generator_generator' +require 'support/generators' + +RSpec.describe Rspec::Generators::GeneratorGenerator, :type => :generator do + setup_default_destination + + describe "generator specs" do + subject(:generator_spec) { file("spec/generator/posts_generator_spec.rb") } + before do + run_generator %w(posts) + end + it "creates the spec file by default" 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 +end diff --git a/spec/generators/rspec/generators/generator_generator_spec.rb b/spec/generators/rspec/generators/generator_generator_spec.rb deleted file mode 100644 index 0fc6df5a8e..0000000000 --- a/spec/generators/rspec/generators/generator_generator_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -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