Skip to content

Commit a00a396

Browse files
committed
Favor request specs over controller specs for rails g controller
Solves Issue #2056
1 parent 4e91e66 commit a00a396

File tree

3 files changed

+91
-15
lines changed

3 files changed

+91
-15
lines changed

lib/generators/rspec/controller/controller_generator.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,22 @@ class ControllerGenerator < Base
77
argument :actions, :type => :array, :default => [], :banner => "action action"
88

99
class_option :template_engine, :desc => "Template engine to generate view files"
10-
class_option :controller_specs, :type => :boolean, :default => true, :desc => "Generate controller specs"
10+
if Rails.version.to_f >= 5.0
11+
class_option :request_specs, :type => :boolean, :default => true, :desc => "Generate request specs"
12+
class_option :controller_specs, :type => :boolean, :default => false, :desc => "Generate controller specs"
13+
else
14+
class_option :controller_specs, :type => :boolean, :default => true, :desc => "Generate controller specs"
15+
end
1116
class_option :view_specs, :type => :boolean, :default => true, :desc => "Generate view specs"
1217
class_option :routing_specs, :type => :boolean, :default => false, :desc => "Generate routing specs"
1318

19+
def generate_request_spec
20+
return unless options[:request_specs]
21+
22+
template 'request_spec.rb',
23+
File.join('spec/requests', class_path, "#{file_name}_request_spec.rb")
24+
end
25+
1426
def generate_controller_spec
1527
return unless options[:controller_specs]
1628

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
require 'rails_helper'
2+
3+
RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:request) %> do
4+
describe "GET /<%= name.underscore.pluralize %>" do
5+
it "works! (now write some real specs)" do
6+
get <%= index_helper %>_path
7+
expect(response).to have_http_status(200)
8+
end
9+
end
10+
end

spec/generators/rspec/controller/controller_generator_spec.rb

Lines changed: 68 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,29 @@
55
RSpec.describe Rspec::Generators::ControllerGenerator, :type => :generator do
66
setup_default_destination
77

8-
describe 'controller specs' do
9-
subject { file('spec/controllers/posts_controller_spec.rb') }
10-
describe 'generated by default' do
11-
before do
12-
run_generator %w(posts)
13-
end
8+
describe 'request specs' do
9+
subject { file('spec/requests/posts_request_spec.rb') }
1410

15-
describe 'the spec' do
16-
it { is_expected.to exist }
17-
it { is_expected.to contain(/require 'rails_helper'/) }
18-
it { is_expected.to contain(/^RSpec.describe PostsController, #{type_metatag(:controller)}/) }
11+
if Rails.version.to_f >= 5.0
12+
describe 'generated by default' do
13+
before do
14+
run_generator %w[posts]
15+
end
16+
17+
describe 'the spec' do
18+
it { is_expected.to exist }
19+
it { is_expected.to contain(/require 'rails_helper'/) }
20+
it { is_expected.to contain(/^RSpec.describe "Posts", #{type_metatag(:request)}/) }
21+
end
1922
end
20-
end
21-
describe 'skipped with a flag' do
22-
before do
23-
run_generator %w(posts --no-controller_specs)
23+
24+
describe 'skipped with a flag' do
25+
before do
26+
run_generator %w[posts --no-request_specs]
27+
end
28+
it { is_expected.not_to exist }
2429
end
30+
else
2531
it { is_expected.not_to exist }
2632
end
2733
end
@@ -127,4 +133,52 @@
127133
it { is_expected.not_to exist }
128134
end
129135
end
136+
137+
describe 'controller specs' do
138+
subject { file('spec/controllers/posts_controller_spec.rb') }
139+
140+
if Rails.version.to_f < 5.0
141+
describe 'generated by default' do
142+
before do
143+
run_generator %w[posts]
144+
end
145+
146+
describe 'the spec' do
147+
it { is_expected.to exist }
148+
it { is_expected.to contain(/require 'rails_helper'/) }
149+
it { is_expected.to contain(/^RSpec.describe PostsController, #{type_metatag(:controller)}/) }
150+
end
151+
end
152+
153+
describe 'skipped with a flag' do
154+
before do
155+
run_generator %w[posts --no-controller-specs]
156+
end
157+
it { is_expected.not_to exist }
158+
end
159+
else
160+
describe 'are not generated' do
161+
it { is_expected.not_to exist }
162+
end
163+
164+
describe 'with --controller-specs flag' do
165+
before do
166+
run_generator %w[posts --controller-specs]
167+
end
168+
169+
describe 'the spec' do
170+
it { is_expected.to exist }
171+
it { is_expected.to contain(/require 'rails_helper'/) }
172+
it { is_expected.to contain(/^RSpec.describe PostsController, #{type_metatag(:controller)}/) }
173+
end
174+
end
175+
176+
describe 'with --no-controller_specs flag' do
177+
before do
178+
run_generator %w[posts --no-controller-specs]
179+
end
180+
it { is_expected.not_to exist }
181+
end
182+
end
183+
end
130184
end

0 commit comments

Comments
 (0)