Skip to content

Commit

Permalink
Merge pull request #2222 from klyonrad/controller-default-generated-s…
Browse files Browse the repository at this point in the history
…pecs

Favor request specs over controller specs when generating a controller
  • Loading branch information
JonRowe committed Dec 20, 2019
2 parents 7dc567f + 5614581 commit db2aeec
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 6 deletions.
10 changes: 9 additions & 1 deletion lib/generators/rspec/controller/controller_generator.rb
Expand Up @@ -7,10 +7,18 @@ class ControllerGenerator < Base
argument :actions, type: :array, default: [], banner: "action action"

class_option :template_engine, desc: "Template engine to generate view files"
class_option :controller_specs, type: :boolean, default: true, desc: "Generate controller specs"
class_option :request_specs, type: :boolean, default: true, desc: "Generate request specs"
class_option :controller_specs, type: :boolean, default: false, desc: "Generate controller specs"
class_option :view_specs, type: :boolean, default: true, desc: "Generate view specs"
class_option :routing_specs, type: :boolean, default: false, desc: "Generate routing specs"

def generate_request_spec
return unless options[:request_specs]

template 'request_spec.rb',
File.join('spec/requests', class_path, "#{file_name}_request_spec.rb")
end

def generate_controller_spec
return unless options[:controller_specs]

Expand Down
14 changes: 14 additions & 0 deletions lib/generators/rspec/controller/templates/request_spec.rb
@@ -0,0 +1,14 @@
require 'rails_helper'

RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:request) %> do
<% namespaced_path = regular_class_path.join('/') %>
<% for action in actions -%>
describe "GET /<%= action %>" do
it "returns http success" do
get "<%= "/#{namespaced_path}" if namespaced_path != '' %>/<%= file_name %>/<%= action %>"
expect(response).to have_http_status(:success)
end
end

<% end -%>
end
63 changes: 58 additions & 5 deletions spec/generators/rspec/controller/controller_generator_spec.rb
Expand Up @@ -5,25 +5,51 @@
RSpec.describe Rspec::Generators::ControllerGenerator, :type => :generator do
setup_default_destination

describe 'controller specs' do
subject { file('spec/controllers/posts_controller_spec.rb') }
describe 'request specs' do
subject { file('spec/requests/posts_request_spec.rb') }

describe 'generated by default' do
before do
run_generator %w(posts)
run_generator %w[posts]
end

describe 'the spec' do
it { is_expected.to exist }
it { is_expected.to contain(/require 'rails_helper'/) }
it { is_expected.to contain(/^RSpec.describe PostsController, #{type_metatag(:controller)}/) }
it { is_expected.to contain(/^RSpec.describe "Posts", #{type_metatag(:request)}/) }
end
end

describe 'skipped with a flag' do
before do
run_generator %w(posts --no-controller_specs)
run_generator %w[posts --no-request_specs]
end
it { is_expected.not_to exist }
end


describe 'with actions' do
before do
run_generator %w[posts index custom_action]
end

it { is_expected.to exist }
it { is_expected.to contain('get "/posts/index"') }
it { is_expected.to contain('get "/posts/custom_action"') }
end

describe 'with namespace and actions' do
subject { file('spec/requests/admin/external/users_request_spec.rb') }

before do
run_generator %w[admin::external::users index custom_action]
end

it { is_expected.to exist }
it { is_expected.to contain(/^RSpec.describe "Admin::External::Users", #{type_metatag(:request)}/) }
it { is_expected.to contain('get "/admin/external/users/index"') }
it { is_expected.to contain('get "/admin/external/users/custom_action"') }
end
end

describe 'view specs' do
Expand Down Expand Up @@ -127,4 +153,31 @@
it { is_expected.not_to exist }
end
end

describe 'controller specs' do
subject { file('spec/controllers/posts_controller_spec.rb') }

describe 'are not generated' do
it { is_expected.not_to exist }
end

describe 'with --controller-specs flag' do
before do
run_generator %w[posts --controller-specs]
end

describe 'the spec' do
it { is_expected.to exist }
it { is_expected.to contain(/require 'rails_helper'/) }
it { is_expected.to contain(/^RSpec.describe PostsController, #{type_metatag(:controller)}/) }
end
end

describe 'with --no-controller_specs flag' do
before do
run_generator %w[posts --no-controller-specs]
end
it { is_expected.not_to exist }
end
end
end

0 comments on commit db2aeec

Please sign in to comment.