rspec-rails 2.6.1 → 2.7.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -5
- data/features/Transactions.md +84 -0
- data/features/controller_specs/Cookies.md +57 -0
- data/features/controller_specs/anonymous_controller.feature +104 -61
- data/features/controller_specs/bypass_rescue.feature +75 -0
- data/features/matchers/relation_match_array.feature +20 -0
- data/features/mocks/mock_model.feature +6 -6
- data/features/support/env.rb +2 -2
- data/features/view_specs/view_spec.feature +2 -8
- data/lib/autotest/rails_rspec2.rb +1 -1
- data/lib/generators/rspec/controller/templates/controller_spec.rb +1 -1
- data/lib/generators/rspec/install/templates/spec/spec_helper.rb +6 -0
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +6 -6
- data/lib/generators/rspec/view/templates/view_spec.rb +1 -1
- data/lib/rspec/rails/example/controller_example_group.rb +19 -1
- data/lib/rspec/rails/fixture_support.rb +11 -0
- data/lib/rspec/rails/matchers.rb +1 -0
- data/lib/rspec/rails/matchers/relation_match_array.rb +3 -0
- data/lib/rspec/rails/matchers/routing_matchers.rb +16 -14
- data/lib/rspec/rails/mocks.rb +12 -7
- data/lib/rspec/rails/version.rb +1 -1
- data/spec/generators/rspec/controller/controller_generator_spec.rb +86 -0
- data/spec/generators/rspec/helper/helper_generator_spec.rb +30 -0
- data/spec/generators/rspec/install/install_generator_spec.rb +18 -0
- data/spec/generators/rspec/integration/integration_generator_spec.rb +44 -0
- data/spec/generators/rspec/mailer/mailer_generator_spec.rb +48 -0
- data/spec/generators/rspec/model/model_generator_spec.rb +52 -0
- data/spec/generators/rspec/observer/observer_generator_spec.rb +21 -0
- data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +113 -0
- data/spec/generators/rspec/view/view_generator_spec.rb +41 -0
- data/spec/rspec/rails/example/controller_example_group_spec.rb +39 -3
- data/spec/rspec/rails/matchers/relation_match_array_spec.rb +19 -0
- data/spec/rspec/rails/matchers/route_to_spec.rb +25 -3
- data/spec/rspec/rails/mocks/mock_model_spec.rb +62 -2
- data/spec/rspec/rails/mocks/stub_model_spec.rb +0 -1
- data/spec/spec_helper.rb +2 -1
- data/spec/{rspec/rails/mocks → support}/ar_classes.rb +5 -2
- metadata +102 -99
- data/.document +0 -5
- data/.gitignore +0 -14
- data/.rspec +0 -1
- data/.travis.yml +0 -11
- data/History.md +0 -1
- data/License.txt +0 -23
- data/README_DEV.md +0 -43
- data/Rakefile +0 -152
- data/Thorfile +0 -45
- data/Upgrade.md +0 -1
- data/cucumber.yml +0 -3
- data/features/.nav +0 -35
- data/features/Changelog.md +0 -162
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/base.rb +0 -60
- data/gemfiles/rails-3-0-stable +0 -6
- data/gemfiles/rails-3.0.0 +0 -5
- data/gemfiles/rails-3.0.1 +0 -5
- data/gemfiles/rails-3.0.2 +0 -5
- data/gemfiles/rails-3.0.3 +0 -5
- data/gemfiles/rails-3.0.4 +0 -5
- data/gemfiles/rails-3.0.5 +0 -5
- data/gemfiles/rails-3.0.6 +0 -5
- data/gemfiles/rails-3.0.7 +0 -5
- data/gemfiles/rails-3.1.0.rc1 +0 -5
- data/gemfiles/rails-master +0 -5
- data/rspec-rails.gemspec +0 -34
- data/templates/generate_stuff.rb +0 -21
- data/templates/run_specs.rb +0 -9
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: ActiveRecord::Relation match array
|
2
|
+
|
3
|
+
The `=~` matcher can be used with an `ActiveRecord::Relation` (scope). The
|
4
|
+
assertion will pass if the scope would return all of the elements specified
|
5
|
+
in the array on the right hand side.
|
6
|
+
|
7
|
+
Scenario: example spec with relation =~ matcher
|
8
|
+
Given a file named "spec/models/widget_spec.rb" with:
|
9
|
+
"""
|
10
|
+
require "spec_helper"
|
11
|
+
|
12
|
+
describe Widget do
|
13
|
+
let!(:widgets) { Array.new(3) { Widget.create } }
|
14
|
+
subject { Widget.scoped }
|
15
|
+
|
16
|
+
it { should =~ widgets }
|
17
|
+
end
|
18
|
+
"""
|
19
|
+
When I run `rspec spec/models/widget_spec.rb`
|
20
|
+
Then the examples should all pass
|
@@ -1,13 +1,13 @@
|
|
1
1
|
Feature: mock_model
|
2
2
|
|
3
|
-
The mock_model method generates a test double that acts like an
|
4
|
-
|
5
|
-
instance of a real
|
3
|
+
The `mock_model` method generates a test double that acts like an instance of
|
4
|
+
`ActiveModel`. This is different from the `stub_model` method which generates
|
5
|
+
an instance of a real model class.
|
6
6
|
|
7
|
-
The benefit of mock_model over stub_model is that
|
8
|
-
examples are not dependent on the
|
7
|
+
The benefit of `mock_model` over `stub_model` is that it is a true double, so
|
8
|
+
the examples are not dependent on the behavior (or mis-behavior), or even the
|
9
9
|
existence of any other code. If you're working on a controller spec and you
|
10
|
-
need a model that doesn't exist, you can pass mock_model a string and the
|
10
|
+
need a model that doesn't exist, you can pass `mock_model` a string and the
|
11
11
|
generated object will act as though its an instance of the class named by
|
12
12
|
that string.
|
13
13
|
|
data/features/support/env.rb
CHANGED
@@ -2,14 +2,14 @@ require 'aruba/cucumber'
|
|
2
2
|
|
3
3
|
module ArubaExt
|
4
4
|
def run(cmd)
|
5
|
-
super(cmd =~ /^rspec/ ? "
|
5
|
+
super(cmd =~ /^rspec/ ? "bin/#{cmd}" : cmd)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
World(ArubaExt)
|
10
10
|
|
11
11
|
Before do
|
12
|
-
@aruba_timeout_seconds =
|
12
|
+
@aruba_timeout_seconds = 15
|
13
13
|
end
|
14
14
|
|
15
15
|
unless File.directory?('./tmp/example_app')
|
@@ -134,7 +134,7 @@ Feature: view spec
|
|
134
134
|
When I run `rspec spec/views`
|
135
135
|
Then the examples should all pass
|
136
136
|
|
137
|
-
Scenario:
|
137
|
+
Scenario: passing view spec that stubs a helper method
|
138
138
|
Given a file named "app/views/secrets/index.html.erb" with:
|
139
139
|
"""
|
140
140
|
<%- if admin? %>
|
@@ -147,13 +147,7 @@ Feature: view spec
|
|
147
147
|
|
148
148
|
describe 'secrets/index.html.erb' do
|
149
149
|
before do
|
150
|
-
|
151
|
-
protected
|
152
|
-
def admin?
|
153
|
-
true
|
154
|
-
end
|
155
|
-
helper_method :admin?
|
156
|
-
end
|
150
|
+
view.stub(:admin?).and_return(true)
|
157
151
|
end
|
158
152
|
|
159
153
|
it 'checks for admin access' do
|
@@ -42,7 +42,7 @@ class Autotest::RailsRspec2 < Autotest::Rspec2
|
|
42
42
|
add_mapping(%r%^(test|spec)/fixtures/(.*).yml$%) { |_, m|
|
43
43
|
["spec/models/#{m[2].singularize}_spec.rb"] + files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%)
|
44
44
|
}
|
45
|
-
add_mapping(%r%^spec
|
45
|
+
add_mapping(%r%^spec/.*_spec\.rb$%) { |filename, _|
|
46
46
|
filename
|
47
47
|
}
|
48
48
|
add_mapping(%r%^app/models/(.*)\.rb$%) { |_, m|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
ENV["RAILS_ENV"] ||= 'test'
|
3
3
|
require File.expand_path("../../config/environment", __FILE__)
|
4
4
|
require 'rspec/rails'
|
5
|
+
require 'rspec/autorun'
|
5
6
|
|
6
7
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
7
8
|
# in spec/support/ and its subdirectories.
|
@@ -24,4 +25,9 @@ RSpec.configure do |config|
|
|
24
25
|
# examples within a transaction, remove the following line or assign false
|
25
26
|
# instead of true.
|
26
27
|
config.use_transactional_fixtures = true
|
28
|
+
|
29
|
+
# If true, the base class of anonymous controllers will be inferred
|
30
|
+
# automatically. This will be the default behavior in future versions of
|
31
|
+
# rspec-rails.
|
32
|
+
config.infer_base_class_for_anonymous_controllers = false
|
27
33
|
end
|
@@ -40,7 +40,7 @@ describe <%= controller_class_name %>Controller do
|
|
40
40
|
describe "GET show" do
|
41
41
|
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
|
42
42
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
43
|
-
get :show, :id => <%= file_name %>.id
|
43
|
+
get :show, :id => <%= file_name %>.id
|
44
44
|
assigns(:<%= ns_file_name %>).should eq(<%= file_name %>)
|
45
45
|
end
|
46
46
|
end
|
@@ -55,7 +55,7 @@ describe <%= controller_class_name %>Controller do
|
|
55
55
|
describe "GET edit" do
|
56
56
|
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
|
57
57
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
58
|
-
get :edit, :id => <%= file_name %>.id
|
58
|
+
get :edit, :id => <%= file_name %>.id
|
59
59
|
assigns(:<%= ns_file_name %>).should eq(<%= file_name %>)
|
60
60
|
end
|
61
61
|
end
|
@@ -127,7 +127,7 @@ describe <%= controller_class_name %>Controller do
|
|
127
127
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
128
128
|
# Trigger the behavior that occurs when invalid params are submitted
|
129
129
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
130
|
-
put :update, :id => <%= file_name %>.id
|
130
|
+
put :update, :id => <%= file_name %>.id, :<%= ns_file_name %> => {}
|
131
131
|
assigns(:<%= ns_file_name %>).should eq(<%= file_name %>)
|
132
132
|
end
|
133
133
|
|
@@ -135,7 +135,7 @@ describe <%= controller_class_name %>Controller do
|
|
135
135
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
136
136
|
# Trigger the behavior that occurs when invalid params are submitted
|
137
137
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
138
|
-
put :update, :id => <%= file_name %>.id
|
138
|
+
put :update, :id => <%= file_name %>.id, :<%= ns_file_name %> => {}
|
139
139
|
response.should render_template("edit")
|
140
140
|
end
|
141
141
|
end
|
@@ -145,13 +145,13 @@ describe <%= controller_class_name %>Controller do
|
|
145
145
|
it "destroys the requested <%= ns_file_name %>" do
|
146
146
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
147
147
|
expect {
|
148
|
-
delete :destroy, :id => <%= file_name %>.id
|
148
|
+
delete :destroy, :id => <%= file_name %>.id
|
149
149
|
}.to change(<%= class_name %>, :count).by(-1)
|
150
150
|
end
|
151
151
|
|
152
152
|
it "redirects to the <%= table_name %> list" do
|
153
153
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
154
|
-
delete :destroy, :id => <%= file_name %>.id
|
154
|
+
delete :destroy, :id => <%= file_name %>.id
|
155
155
|
response.should redirect_to(<%= index_helper %>_url)
|
156
156
|
end
|
157
157
|
end
|
@@ -1,3 +1,7 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.add_setting :infer_base_class_for_anonymous_controllers, :default => false
|
3
|
+
end
|
4
|
+
|
1
5
|
module RSpec::Rails
|
2
6
|
# Extends ActionController::TestCase::Behavior to work with RSpec.
|
3
7
|
#
|
@@ -124,7 +128,11 @@ module RSpec::Rails
|
|
124
128
|
# +controller+ method. Any instance methods, filters, etc, that are
|
125
129
|
# defined in +ApplicationController+, however, are accessible from within
|
126
130
|
# the block.
|
127
|
-
def controller(base_class =
|
131
|
+
def controller(base_class = nil, &body)
|
132
|
+
base_class ||= RSpec.configuration.infer_base_class_for_anonymous_controllers? ?
|
133
|
+
controller_class :
|
134
|
+
ApplicationController
|
135
|
+
|
128
136
|
metadata[:example_group][:describes] = Class.new(base_class, &body)
|
129
137
|
metadata[:example_group][:describes].singleton_class.class_eval do
|
130
138
|
def name; "AnonymousController" end
|
@@ -144,6 +152,16 @@ module RSpec::Rails
|
|
144
152
|
module InstanceMethods
|
145
153
|
attr_reader :controller, :routes
|
146
154
|
|
155
|
+
module BypassRescue
|
156
|
+
def rescue_with_handler(exception)
|
157
|
+
raise exception
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def bypass_rescue
|
162
|
+
controller.extend(BypassRescue)
|
163
|
+
end
|
164
|
+
|
147
165
|
def method_missing(method, *args, &block)
|
148
166
|
if @orig_routes && @orig_routes.named_routes.helpers.include?(method)
|
149
167
|
controller.send(method, *args, &block)
|
@@ -9,6 +9,17 @@ module RSpec
|
|
9
9
|
include ActiveRecord::TestFixtures
|
10
10
|
|
11
11
|
included do
|
12
|
+
# TODO (DC 2011-06-25) this is necessary because fixture_file_upload
|
13
|
+
# accesses fixture_path directly on ActiveSupport::TestCase. This is
|
14
|
+
# fixed in rails by https://github.com/rails/rails/pull/1861, which
|
15
|
+
# should be part of the 3.1 release, at which point we can include
|
16
|
+
# these lines for rails < 3.1.
|
17
|
+
ActiveSupport::TestCase.class_eval do
|
18
|
+
include ActiveRecord::TestFixtures
|
19
|
+
self.fixture_path = RSpec.configuration.fixture_path
|
20
|
+
end
|
21
|
+
# /TODO
|
22
|
+
|
12
23
|
self.fixture_path = RSpec.configuration.fixture_path
|
13
24
|
self.use_transactional_fixtures = RSpec.configuration.use_transactional_fixtures
|
14
25
|
self.use_instantiated_fixtures = RSpec.configuration.use_instantiated_fixtures
|
data/lib/rspec/rails/matchers.rb
CHANGED
@@ -2,26 +2,28 @@ module RSpec::Rails::Matchers
|
|
2
2
|
module RoutingMatchers
|
3
3
|
extend RSpec::Matchers::DSL
|
4
4
|
|
5
|
-
matcher :route_to do |*
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
options ||= {}
|
14
|
-
options.merge!(:controller => controller, :action => action)
|
15
|
-
else
|
16
|
-
options = path
|
17
|
-
end
|
5
|
+
matcher :route_to do |*expected|
|
6
|
+
expected_options = expected[1] || {}
|
7
|
+
if Hash === expected[0]
|
8
|
+
expected_options.merge!(expected[0])
|
9
|
+
else
|
10
|
+
controller, action = expected[0].split('#')
|
11
|
+
expected_options.merge!(:controller => controller, :action => action)
|
12
|
+
end
|
18
13
|
|
19
|
-
|
14
|
+
match_unless_raises ActiveSupport::TestCase::Assertion do |verb_to_path_map|
|
15
|
+
path, query = *verb_to_path_map.values.first.split('?')
|
16
|
+
assert_recognizes(
|
17
|
+
expected_options,
|
18
|
+
{:method => verb_to_path_map.keys.first, :path => path},
|
19
|
+
Rack::Utils::parse_query(query)
|
20
|
+
)
|
20
21
|
end
|
21
22
|
|
22
23
|
failure_message_for_should do
|
23
24
|
rescued_exception.message
|
24
25
|
end
|
26
|
+
|
25
27
|
end
|
26
28
|
|
27
29
|
matcher :be_routable do
|
data/lib/rspec/rails/mocks.rb
CHANGED
@@ -63,6 +63,7 @@ module RSpec
|
|
63
63
|
else
|
64
64
|
model_class = Object.const_set(string_or_model_class, Class.new do
|
65
65
|
extend ActiveModel::Naming
|
66
|
+
def self.primary_key; :id; end
|
66
67
|
end)
|
67
68
|
end
|
68
69
|
else
|
@@ -101,22 +102,27 @@ EOM
|
|
101
102
|
m.__send__(:__mock_proxy).instance_eval(<<-CODE, __FILE__, __LINE__)
|
102
103
|
def @object.is_a?(other)
|
103
104
|
#{model_class}.ancestors.include?(other)
|
104
|
-
end
|
105
|
+
end unless #{stubs.has_key?(:is_a?)}
|
106
|
+
|
105
107
|
def @object.kind_of?(other)
|
106
108
|
#{model_class}.ancestors.include?(other)
|
107
|
-
end
|
109
|
+
end unless #{stubs.has_key?(:kind_of?)}
|
110
|
+
|
108
111
|
def @object.instance_of?(other)
|
109
112
|
other == #{model_class}
|
110
|
-
end
|
113
|
+
end unless #{stubs.has_key?(:instance_of?)}
|
114
|
+
|
111
115
|
def @object.respond_to?(method_name, include_private=false)
|
112
116
|
#{model_class}.respond_to?(:column_names) && #{model_class}.column_names.include?(method_name.to_s) || super
|
113
|
-
end
|
117
|
+
end unless #{stubs.has_key?(:respond_to?)}
|
118
|
+
|
114
119
|
def @object.class
|
115
120
|
#{model_class}
|
116
|
-
end
|
121
|
+
end unless #{stubs.has_key?(:class)}
|
122
|
+
|
117
123
|
def @object.to_s
|
118
124
|
"#{model_class.name}_#{to_param}"
|
119
|
-
end
|
125
|
+
end unless #{stubs.has_key?(:to_s)}
|
120
126
|
CODE
|
121
127
|
yield m if block_given?
|
122
128
|
end
|
@@ -153,7 +159,6 @@ EOM
|
|
153
159
|
# stub_model(Model)
|
154
160
|
# stub_model(Model).as_new_record
|
155
161
|
# stub_model(Model, hash_of_stubs)
|
156
|
-
# stub_model(Model, instance_variable_name, hash_of_stubs)
|
157
162
|
#
|
158
163
|
# Creates an instance of +Model+ with +to_param+ stubbed using a
|
159
164
|
# generated value that is unique to each object.. If +Model+ is an
|
data/lib/rspec/rails/version.rb
CHANGED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# Generators are not automatically loaded by Rails
|
4
|
+
require 'generators/rspec/controller/controller_generator'
|
5
|
+
|
6
|
+
describe Rspec::Generators::ControllerGenerator do
|
7
|
+
# Tell the generator where to put its output (what it thinks of as Rails.root)
|
8
|
+
destination File.expand_path("../../../../../tmp", __FILE__)
|
9
|
+
|
10
|
+
before { prepare_destination }
|
11
|
+
|
12
|
+
describe 'controller specs' do
|
13
|
+
subject { file('spec/controllers/posts_controller_spec.rb') }
|
14
|
+
describe 'generated by default' do
|
15
|
+
before do
|
16
|
+
run_generator %w(posts)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'the spec' do
|
20
|
+
it { should exist }
|
21
|
+
it { should contain /require 'spec_helper'/ }
|
22
|
+
it { should contain /describe PostsController/ }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
describe 'skipped with a flag' do
|
26
|
+
before do
|
27
|
+
run_generator %w(posts --no-controller_specs)
|
28
|
+
end
|
29
|
+
it { should_not exist }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'view specs' do
|
34
|
+
describe 'are not generated' do
|
35
|
+
describe 'with no-view-spec flag' do
|
36
|
+
before do
|
37
|
+
run_generator %w(posts index show --no-view-specs)
|
38
|
+
end
|
39
|
+
describe 'index.html.erb' do
|
40
|
+
subject { file('spec/views/posts/index.html.erb_spec.rb') }
|
41
|
+
it { should_not exist }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
describe 'with no actions' do
|
45
|
+
before do
|
46
|
+
run_generator %w(posts)
|
47
|
+
end
|
48
|
+
describe 'index.html.erb' do
|
49
|
+
subject { file('spec/views/posts/index.html.erb_spec.rb') }
|
50
|
+
it { should_not exist }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'are generated' do
|
56
|
+
describe 'with default template engine' do
|
57
|
+
before do
|
58
|
+
run_generator %w(posts index show)
|
59
|
+
end
|
60
|
+
describe 'index.html.erb' do
|
61
|
+
subject { file('spec/views/posts/index.html.erb_spec.rb') }
|
62
|
+
it { should exist }
|
63
|
+
it { should contain /require 'spec_helper'/ }
|
64
|
+
it { should contain /describe "posts\/index.html.erb"/ }
|
65
|
+
end
|
66
|
+
describe 'show.html.erb' do
|
67
|
+
subject { file('spec/views/posts/show.html.erb_spec.rb') }
|
68
|
+
it { should exist }
|
69
|
+
it { should contain /require 'spec_helper'/ }
|
70
|
+
it { should contain /describe "posts\/show.html.erb"/ }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
describe 'with haml' do
|
74
|
+
before do
|
75
|
+
run_generator %w(posts index --template_engine haml)
|
76
|
+
end
|
77
|
+
describe 'index.html.haml' do
|
78
|
+
subject { file('spec/views/posts/index.html.haml_spec.rb') }
|
79
|
+
it { should exist }
|
80
|
+
it { should contain /require 'spec_helper'/ }
|
81
|
+
it { should contain /describe "posts\/index.html.haml"/ }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# Generators are not automatically loaded by Rails
|
4
|
+
require 'generators/rspec/helper/helper_generator'
|
5
|
+
|
6
|
+
describe Rspec::Generators::HelperGenerator do
|
7
|
+
# Tell the generator where to put its output (what it thinks of as Rails.root)
|
8
|
+
destination File.expand_path("../../../../../tmp", __FILE__)
|
9
|
+
|
10
|
+
before { prepare_destination }
|
11
|
+
|
12
|
+
subject { file('spec/helpers/posts_helper_spec.rb') }
|
13
|
+
describe 'generated by default' do
|
14
|
+
before do
|
15
|
+
run_generator %w(posts)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'the spec' do
|
19
|
+
it { should exist }
|
20
|
+
it { should contain /require 'spec_helper'/ }
|
21
|
+
it { should contain /describe PostsHelper/ }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
describe 'skipped with a flag' do
|
25
|
+
before do
|
26
|
+
run_generator %w(posts --no-helper_specs)
|
27
|
+
end
|
28
|
+
it { should_not exist }
|
29
|
+
end
|
30
|
+
end
|