rspec-rails 1.2.6 → 1.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +27 -2
- data/Manifest.txt +3 -2
- data/Rakefile +5 -6
- data/TODO.txt +17 -0
- data/Upgrade.rdoc +11 -0
- data/generators/integration_spec/integration_spec_generator.rb +10 -0
- data/generators/integration_spec/templates/integration_spec.rb +4 -0
- data/generators/rspec/templates/rcov.opts +1 -1
- data/generators/rspec/templates/rspec.rake +27 -12
- data/generators/rspec/templates/spec_helper.rb +5 -1
- data/generators/rspec_controller/templates/helper_spec.rb +1 -1
- data/generators/rspec_controller/templates/view_spec.rb +1 -1
- data/generators/rspec_default_values.rb +11 -2
- data/generators/rspec_model/templates/model_spec.rb +1 -3
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +7 -3
- data/generators/rspec_scaffold/templates/controller_spec.rb +8 -8
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +2 -4
- data/generators/rspec_scaffold/templates/helper_spec.rb +2 -2
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +1 -2
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +2 -4
- data/generators/rspec_scaffold/templates/routing_spec.rb +16 -16
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +0 -1
- data/lib/autotest/discover.rb +5 -1
- data/lib/spec/rails.rb +0 -2
- data/lib/spec/rails/example.rb +1 -0
- data/lib/spec/rails/example/controller_example_group.rb +22 -2
- data/lib/spec/rails/example/functional_example_group.rb +22 -0
- data/lib/spec/rails/example/integration_example_group.rb +16 -0
- data/lib/spec/rails/example/render_observer.rb +15 -2
- data/lib/spec/rails/extensions/spec/matchers/have.rb +4 -4
- data/lib/spec/rails/matchers/ar_be_valid.rb +33 -31
- data/lib/spec/rails/matchers/change.rb +9 -7
- data/lib/spec/rails/matchers/render_template.rb +10 -1
- data/lib/spec/rails/spec_server.rb +3 -0
- data/lib/spec/rails/version.rb +4 -3
- data/spec/resources/controllers/controller_spec_controller.rb +5 -2
- data/spec/spec/rails/example/controller_isolation_spec.rb +7 -1
- data/spec/spec/rails/extensions/action_view_base_spec.rb +42 -16
- data/spec/spec/rails/matchers/errors_on_spec.rb +14 -2
- data/spec/spec/rails/matchers/have_text_spec.rb +0 -1
- data/spec/spec/rails/matchers/render_template_spec.rb +11 -1
- data/spec/spec/rails/spec_server_spec.rb +2 -1
- metadata +12 -11
- data/features/step_definitions/people.rb +0 -6
- data/features/support/env.rb +0 -13
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_dep
|
|
3
3
|
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
4
|
describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
|
5
5
|
include <%= controller_class_name %>Helper
|
6
|
-
|
6
|
+
|
7
7
|
before(:each) do
|
8
8
|
assigns[:<%= file_name %>] = @<%= file_name %> = stub_model(<%= class_name %>,
|
9
9
|
:new_record? => false<%= output_attributes.empty? ? '' : ',' %>
|
@@ -15,7 +15,7 @@ describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
|
|
15
15
|
|
16
16
|
it "renders the edit <%= file_name %> form" do
|
17
17
|
render
|
18
|
-
|
18
|
+
|
19
19
|
response.should have_tag("form[action=#{<%= file_name %>_path(@<%= file_name %>)}][method=post]") do
|
20
20
|
<% for attribute in output_attributes -%>
|
21
21
|
with_tag('<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]', "<%= file_name %>[<%= attribute.name %>]")
|
@@ -23,5 +23,3 @@ describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
|
2
2
|
|
3
3
|
describe <%= controller_class_name %>Helper do
|
4
|
-
|
4
|
+
|
5
5
|
#Delete this example and add some real ones or delete this file
|
6
6
|
it "is included in the helper object" do
|
7
7
|
included_modules = (class << helper; self; end).send :included_modules
|
8
8
|
included_modules.should include(<%= controller_class_name %>Helper)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
end
|
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_dep
|
|
3
3
|
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
4
|
describe "/<%= table_name %>/index.<%= default_file_extension %>" do
|
5
5
|
include <%= controller_class_name %>Helper
|
6
|
-
|
6
|
+
|
7
7
|
before(:each) do
|
8
8
|
assigns[:<%= table_name %>] = [
|
9
9
|
<% [1,2].each_with_index do |id, model_index| -%>
|
@@ -25,4 +25,3 @@ describe "/<%= table_name %>/index.<%= default_file_extension %>" do
|
|
25
25
|
<% end -%>
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_dep
|
|
3
3
|
<% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
|
4
4
|
describe "/<%= table_name %>/new.<%= default_file_extension %>" do
|
5
5
|
include <%= controller_class_name %>Helper
|
6
|
-
|
6
|
+
|
7
7
|
before(:each) do
|
8
8
|
assigns[:<%= file_name %>] = stub_model(<%= class_name %>,
|
9
9
|
:new_record? => true<%= output_attributes.empty? ? '' : ',' %>
|
@@ -15,7 +15,7 @@ describe "/<%= table_name %>/new.<%= default_file_extension %>" do
|
|
15
15
|
|
16
16
|
it "renders new <%= file_name %> form" do
|
17
17
|
render
|
18
|
-
|
18
|
+
|
19
19
|
response.should have_tag("form[action=?][method=post]", <%= table_name %>_path) do
|
20
20
|
<% for attribute in output_attributes -%>
|
21
21
|
with_tag("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]", "<%= file_name %>[<%= attribute.name %>]")
|
@@ -23,5 +23,3 @@ describe "/<%= table_name %>/new.<%= default_file_extension %>" do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
|
@@ -5,27 +5,27 @@ describe <%= controller_class_name %>Controller do
|
|
5
5
|
it "maps #index" do
|
6
6
|
route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>"
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
it "maps #new" do
|
10
10
|
route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new"
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "maps #show" do
|
14
14
|
route_for(:controller => "<%= table_name %>", :action => "show", :id => "1").should == "/<%= table_name %>/1"
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it "maps #edit" do
|
18
18
|
route_for(:controller => "<%= table_name %>", :action => "edit", :id => "1").should == "/<%= table_name %>/1/edit"
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
it "maps #create" do
|
22
|
+
route_for(:controller => "<%= table_name %>", :action => "create").should == {:path => "/<%= table_name %>", :method => :post}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "maps #update" do
|
26
|
+
route_for(:controller => "<%= table_name %>", :action => "update", :id => "1").should == {:path =>"/<%= table_name %>/1", :method => :put}
|
27
|
+
end
|
24
28
|
|
25
|
-
it "maps #update" do
|
26
|
-
route_for(:controller => "<%= table_name %>", :action => "update", :id => "1").should == {:path =>"/<%= table_name %>/1", :method => :put}
|
27
|
-
end
|
28
|
-
|
29
29
|
it "maps #destroy" do
|
30
30
|
route_for(:controller => "<%= table_name %>", :action => "destroy", :id => "1").should == {:path =>"/<%= table_name %>/1", :method => :delete}
|
31
31
|
end
|
@@ -35,27 +35,27 @@ describe <%= controller_class_name %>Controller do
|
|
35
35
|
it "generates params for #index" do
|
36
36
|
params_from(:get, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "index"}
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
it "generates params for #new" do
|
40
40
|
params_from(:get, "/<%= table_name %>/new").should == {:controller => "<%= table_name %>", :action => "new"}
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "generates params for #create" do
|
44
44
|
params_from(:post, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "create"}
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
it "generates params for #show" do
|
48
48
|
params_from(:get, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "show", :id => "1"}
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
it "generates params for #edit" do
|
52
52
|
params_from(:get, "/<%= table_name %>/1/edit").should == {:controller => "<%= table_name %>", :action => "edit", :id => "1"}
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
it "generates params for #update" do
|
56
56
|
params_from(:put, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "update", :id => "1"}
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
it "generates params for #destroy" do
|
60
60
|
params_from(:delete, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "destroy", :id => "1"}
|
61
61
|
end
|
data/lib/autotest/discover.rb
CHANGED
data/lib/spec/rails.rb
CHANGED
data/lib/spec/rails/example.rb
CHANGED
@@ -9,6 +9,7 @@ require "spec/rails/example/controller_example_group"
|
|
9
9
|
require "spec/rails/example/helper_example_group"
|
10
10
|
require "spec/rails/example/view_example_group"
|
11
11
|
require "spec/rails/example/routing_example_group"
|
12
|
+
require "spec/rails/example/integration_example_group"
|
12
13
|
require "spec/rails/example/cookies_proxy"
|
13
14
|
|
14
15
|
module Spec
|
@@ -166,8 +166,15 @@ MESSAGE
|
|
166
166
|
end
|
167
167
|
|
168
168
|
def render(*args)
|
169
|
-
|
170
|
-
|
169
|
+
if file = args.last[:file].instance_eval{@template_path}
|
170
|
+
record_render :file => file
|
171
|
+
elsif args.last[:inline]
|
172
|
+
super
|
173
|
+
elsif @_rendered
|
174
|
+
record_render(args[0])
|
175
|
+
else
|
176
|
+
super
|
177
|
+
end
|
171
178
|
end
|
172
179
|
|
173
180
|
private
|
@@ -213,6 +220,19 @@ MESSAGE
|
|
213
220
|
end
|
214
221
|
end
|
215
222
|
|
223
|
+
# Rails 2.3
|
224
|
+
def default_template(action_name = self.action_name)
|
225
|
+
if integrate_views?
|
226
|
+
super
|
227
|
+
else
|
228
|
+
begin
|
229
|
+
super
|
230
|
+
rescue ActionView::MissingTemplate
|
231
|
+
"#{self.class.name.sub(/Controller$/,'').underscore}/#{action_name}"
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
216
236
|
def response(&block)
|
217
237
|
# NOTE - we're setting @update for the assert_select_spec - kinda weird, huh?
|
218
238
|
@update = block
|
@@ -10,14 +10,36 @@ module Spec
|
|
10
10
|
|
11
11
|
attr_reader :request, :response
|
12
12
|
|
13
|
+
# The params hash accessed within a view or helper. Use this before
|
14
|
+
# rendering a view or calling a helper to provide data used by the
|
15
|
+
# view or helper.
|
16
|
+
#
|
17
|
+
# == Examples
|
18
|
+
# # in a view spec
|
19
|
+
# params[:name] = "David"
|
20
|
+
# render
|
21
|
+
# response.should have_tag("div.name","David")
|
22
|
+
#
|
23
|
+
# # in a helper spec
|
24
|
+
# params[:first_name] = "David"
|
25
|
+
# params[:last_name] = "Chelimsky"
|
26
|
+
# helper.full_name.should == "David Chelimsky"
|
13
27
|
def params
|
14
28
|
request.parameters
|
15
29
|
end
|
16
30
|
|
31
|
+
# Provides access to the flash hash. Use this after rendering a
|
32
|
+
# view, calling a helper or calling a controller action.
|
33
|
+
#
|
34
|
+
# == Examples
|
35
|
+
# post :create
|
36
|
+
# flash[:notice].should == "Success!"
|
17
37
|
def flash
|
18
38
|
@controller.__send__ :flash
|
19
39
|
end
|
20
40
|
|
41
|
+
# Provides acces to the session hash. Use this before or after
|
42
|
+
# rendering a view, calling a helper or calling a controller action.
|
21
43
|
def session
|
22
44
|
request.session
|
23
45
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class ActionController::IntegrationTest
|
2
|
+
alias_method :orig_initialize, :initialize
|
3
|
+
def initialize(*args)
|
4
|
+
super
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
module Spec
|
9
|
+
module Rails
|
10
|
+
module Example
|
11
|
+
class IntegrationExampleGroup < ActionController::IntegrationTest
|
12
|
+
Spec::Example::ExampleGroupFactory.register(:integration, self)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -35,15 +35,28 @@ module Spec
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def stub(*args)
|
39
|
+
if args[0] == :render
|
40
|
+
register_verify_after_each
|
41
|
+
render_proxy.stub(args.first, :expected_from => caller(1)[0])
|
42
|
+
else
|
43
|
+
super
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# FIXME - for some reason, neither alias nor alias_method are working
|
48
|
+
# as expected in the else branch, so this is a duplicate of stub()
|
49
|
+
# above. Could delegate, but then we'd run into craziness handling
|
50
|
+
# :expected_from. This will have to do for the moment.
|
38
51
|
def stub!(*args)
|
39
52
|
if args[0] == :render
|
40
53
|
register_verify_after_each
|
41
|
-
render_proxy.stub!(
|
54
|
+
render_proxy.stub!(args.first, :expected_from => caller(1)[0])
|
42
55
|
else
|
43
56
|
super
|
44
57
|
end
|
45
58
|
end
|
46
|
-
|
59
|
+
|
47
60
|
def verify_rendered_proc #:nodoc:
|
48
61
|
template = self
|
49
62
|
@verify_rendered_proc ||= Proc.new do
|
@@ -6,14 +6,14 @@ module Spec #:nodoc:
|
|
6
6
|
|
7
7
|
def failure_message_for_should_with_errors_on_extensions
|
8
8
|
return "expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@actual}" if @collection_name == :errors_on
|
9
|
-
return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}"
|
10
|
-
return
|
9
|
+
return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}" if @collection_name == :error_on
|
10
|
+
return failure_message_for_should_without_errors_on_extensions
|
11
11
|
end
|
12
12
|
alias_method_chain :failure_message_for_should, :errors_on_extensions
|
13
13
|
|
14
14
|
def description_with_errors_on_extensions
|
15
|
-
return "
|
16
|
-
return "
|
15
|
+
return "have #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}" if @collection_name == :errors_on
|
16
|
+
return "have #{relativities[@relativity]}#{@expected} error on :#{@args[0]}" if @collection_name == :error_on
|
17
17
|
return description_without_errors_on_extensions
|
18
18
|
end
|
19
19
|
alias_method_chain :description, :errors_on_extensions
|
@@ -1,44 +1,46 @@
|
|
1
|
-
|
2
|
-
module
|
3
|
-
module
|
1
|
+
if defined?(ActiveRecord::Base)
|
2
|
+
module Spec
|
3
|
+
module Rails
|
4
|
+
module Matchers
|
4
5
|
|
5
|
-
|
6
|
+
class ArBeValid #:nodoc:
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def initialize
|
9
|
+
@matcher = Spec::Matchers::Be.new :be_valid
|
10
|
+
@matcher.__send__ :handling_predicate!
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
def matches?(actual)
|
14
|
+
@actual = actual
|
15
|
+
@matcher.matches? @actual
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
def failure_message_for_should
|
19
|
+
if @actual.respond_to?(:errors) &&
|
20
|
+
ActiveRecord::Errors === @actual.errors
|
21
|
+
"Expected #{@actual.inspect} to be valid, but it was not\nErrors: " + @actual.errors.full_messages.join(", ")
|
22
|
+
else
|
23
|
+
@matcher.failure_message_for_should
|
24
|
+
end
|
23
25
|
end
|
24
|
-
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
def failure_message_for_should_not
|
28
|
+
@matcher.failure_message_for_should_not
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
def description
|
32
|
+
"be valid"
|
33
|
+
end
|
32
34
|
end
|
33
|
-
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
# :call-seq:
|
37
|
+
# response.should be_valid
|
38
|
+
# response.should_not be_valid
|
39
|
+
def be_valid
|
40
|
+
ArBeValid.new
|
41
|
+
end
|
41
42
|
|
43
|
+
end
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
-
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
if defined?(ActiveRecord::Base)
|
2
|
+
module Spec
|
3
|
+
module Matchers
|
4
|
+
class Change
|
5
|
+
def evaluate_value_proc_with_ensured_evaluation_of_proxy
|
6
|
+
value = evaluate_value_proc_without_ensured_evaluation_of_proxy
|
7
|
+
ActiveRecord::Associations::AssociationProxy === value ? value.dup : value
|
8
|
+
end
|
9
|
+
alias_method_chain :evaluate_value_proc, :ensured_evaluation_of_proxy
|
7
10
|
end
|
8
|
-
alias_method_chain :evaluate_value_proc, :ensured_evaluation_of_proxy
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -33,7 +33,16 @@ module Spec
|
|
33
33
|
return false if @actual.blank?
|
34
34
|
given_controller_path, given_file = path_and_file(@actual)
|
35
35
|
expected_controller_path, expected_file = path_and_file(@expected)
|
36
|
-
given_controller_path == expected_controller_path && given_file
|
36
|
+
given_controller_path == expected_controller_path && match_files(given_file, expected_file)
|
37
|
+
end
|
38
|
+
|
39
|
+
def match_files(actual, expected)
|
40
|
+
actual_parts = actual.split('.')
|
41
|
+
expected_parts = expected.split('.')
|
42
|
+
expected_parts.each_with_index do |expected_part, index|
|
43
|
+
return false unless expected_part == actual_parts[index]
|
44
|
+
end
|
45
|
+
true
|
37
46
|
end
|
38
47
|
|
39
48
|
def failure_message_for_should
|