dchelimsky-rspec-rails 1.1.12 → 1.1.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +29 -2
- data/License.txt +1 -1
- data/Manifest.txt +7 -6
- data/README.txt +5 -4
- data/Rakefile +14 -2
- data/TODO.txt +1 -0
- data/Upgrade.txt +30 -0
- data/generators/rspec/templates/rspec.rake +12 -10
- data/generators/rspec/templates/script/spec_server +10 -111
- data/generators/rspec_controller/rspec_controller_generator.rb +1 -5
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +9 -13
- data/generators/rspec_scaffold/templates/controller_spec.rb +25 -25
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +1 -1
- data/generators/rspec_scaffold/templates/helper_spec.rb +1 -1
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +1 -1
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +1 -1
- data/generators/rspec_scaffold/templates/routing_spec.rb +24 -20
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +1 -1
- data/lib/spec/rails/example/controller_example_group.rb +46 -16
- data/lib/spec/rails/example/functional_example_group.rb +7 -22
- data/lib/spec/rails/example/helper_example_group.rb +6 -9
- data/lib/spec/rails/example/model_example_group.rb +1 -1
- data/lib/spec/rails/example/render_observer.rb +0 -26
- data/lib/spec/rails/example/view_example_group.rb +32 -34
- data/lib/spec/rails/example.rb +0 -2
- data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
- data/lib/spec/rails/extensions/spec/runner/configuration.rb +12 -44
- data/lib/spec/rails/extensions.rb +1 -1
- data/lib/spec/rails/matchers/ar_be_valid.rb +3 -0
- data/lib/spec/rails/matchers/have_text.rb +1 -1
- data/lib/spec/rails/matchers/include_text.rb +2 -2
- data/lib/spec/rails/matchers/redirect_to.rb +6 -14
- data/lib/spec/rails/matchers/render_template.rb +5 -1
- data/lib/spec/rails/spec_server.rb +86 -0
- data/lib/spec/rails/version.rb +2 -2
- data/lib/spec/rails.rb +10 -9
- data/rspec-rails.gemspec +12 -9
- data/spec/resources/controllers/controller_spec_controller.rb +1 -1
- data/spec/resources/controllers/render_spec_controller.rb +1 -1
- data/spec/resources/controllers/rjs_spec_controller.rb +1 -1
- data/spec/spec/rails/example/configuration_spec.rb +15 -29
- data/spec/spec/rails/example/{controller_spec_spec.rb → controller_example_group_spec.rb} +84 -60
- data/spec/spec/rails/example/cookies_proxy_spec.rb +32 -36
- data/spec/spec/rails/example/example_group_factory_spec.rb +5 -5
- data/spec/spec/rails/example/{helper_spec_spec.rb → helper_example_group_spec.rb} +8 -2
- data/spec/spec/rails/example/{model_spec_spec.rb → model_example_group_spec.rb} +3 -1
- data/spec/spec/rails/example/{view_spec_spec.rb → view_example_group_spec.rb} +33 -15
- data/spec/spec/rails/matchers/ar_be_valid_spec.rb +10 -0
- data/spec/spec/rails/matchers/assert_select_spec.rb +1 -0
- data/spec/spec/rails/matchers/have_text_spec.rb +12 -4
- data/spec/spec/rails/matchers/include_text_spec.rb +11 -13
- data/spec/spec/rails/matchers/redirect_to_spec.rb +221 -210
- data/spec/spec/rails/matchers/render_template_spec.rb +161 -158
- data/spec/spec/rails/spec_server_spec.rb +18 -7
- data/spec/spec_helper.rb +20 -9
- metadata +21 -10
- data/lib/spec/rails/example/rails_example_group.rb +0 -28
- data/lib/spec/rails/extensions/action_controller/base.rb +0 -14
@@ -16,29 +16,27 @@ module Spec
|
|
16
16
|
describe "with a String key" do
|
17
17
|
|
18
18
|
it "should accept a String value" do
|
19
|
-
|
20
|
-
|
19
|
+
proxy = CookiesProxy.new(self)
|
20
|
+
proxy['key'] = 'value'
|
21
21
|
get :index
|
22
22
|
if ::Rails::VERSION::STRING >= "2.3"
|
23
|
-
|
23
|
+
proxy['key'].should == 'value'
|
24
24
|
else
|
25
|
-
|
25
|
+
proxy['key'].should == ['value']
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
cookies['key'].path.should == path
|
41
|
-
end
|
29
|
+
it "should accept a Hash value" do
|
30
|
+
proxy = CookiesProxy.new(self)
|
31
|
+
proxy['key'] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
|
32
|
+
get :index
|
33
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
34
|
+
proxy['key'].should == 'value'
|
35
|
+
else
|
36
|
+
proxy['key'].should == ['value']
|
37
|
+
proxy['key'].value.should == ['value']
|
38
|
+
proxy['key'].expires.should == expiration
|
39
|
+
proxy['key'].path.should == path
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
@@ -47,29 +45,27 @@ module Spec
|
|
47
45
|
describe "with a Symbol key" do
|
48
46
|
|
49
47
|
it "should accept a String value" do
|
50
|
-
|
51
|
-
|
48
|
+
proxy = CookiesProxy.new(self)
|
49
|
+
proxy[:key] = 'value'
|
52
50
|
get :index
|
53
51
|
if ::Rails::VERSION::STRING >= "2.3"
|
54
|
-
|
52
|
+
proxy[:key].should == 'value'
|
55
53
|
else
|
56
|
-
|
54
|
+
proxy[:key].should == ['value']
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
example_cookies[:key].path.should == path
|
72
|
-
end
|
58
|
+
it "should accept a Hash value" do
|
59
|
+
proxy = CookiesProxy.new(self)
|
60
|
+
proxy[:key] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
|
61
|
+
get :index
|
62
|
+
if ::Rails::VERSION::STRING >= "2.3"
|
63
|
+
proxy[:key].should == 'value'
|
64
|
+
else
|
65
|
+
proxy[:key].should == ['value']
|
66
|
+
proxy[:key].value.should == ['value']
|
67
|
+
proxy[:key].expires.should == expiration
|
68
|
+
proxy[:key].path.should == path
|
73
69
|
end
|
74
70
|
end
|
75
71
|
|
@@ -77,11 +73,11 @@ module Spec
|
|
77
73
|
|
78
74
|
describe "#delete" do
|
79
75
|
it "should delete from the response cookies" do
|
80
|
-
|
76
|
+
proxy = CookiesProxy.new(self)
|
81
77
|
response_cookies = mock('cookies')
|
82
78
|
response.should_receive(:cookies).and_return(response_cookies)
|
83
79
|
response_cookies.should_receive(:delete).with('key')
|
84
|
-
|
80
|
+
proxy.delete :key
|
85
81
|
end
|
86
82
|
end
|
87
83
|
end
|
@@ -24,21 +24,21 @@ module Spec
|
|
24
24
|
example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
|
25
25
|
end
|
26
26
|
|
27
|
-
it "should return
|
27
|
+
it "should return an ActiveSupport::TestCase when given :spec_path => '/blah/spec/foo/' (anything other than controllers, views and helpers)" do
|
28
28
|
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
29
29
|
"name", :spec_path => '/blah/spec/foo/blah.rb'
|
30
30
|
) {}
|
31
|
-
example_group.superclass.should ==
|
31
|
+
example_group.superclass.should == ActiveSupport::TestCase
|
32
32
|
end
|
33
33
|
|
34
|
-
it "should return
|
34
|
+
it "should return an ActiveSupport::TestCase when given :spec_path => '\\blah\\spec\\foo\\' (windows format) (anything other than controllers, views and helpers)" do
|
35
35
|
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
36
36
|
"name", :spec_path => '\\blah\\spec\\foo\\blah.rb'
|
37
37
|
) {}
|
38
|
-
example_group.superclass.should ==
|
38
|
+
example_group.superclass.should == ActiveSupport::TestCase
|
39
39
|
end
|
40
40
|
|
41
|
-
it "should return a ViewExampleGroup when given :type => :
|
41
|
+
it "should return a ViewExampleGroup when given :type => :view" do
|
42
42
|
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
43
43
|
"name", :type => :view
|
44
44
|
) {}
|
@@ -16,6 +16,8 @@ module Spec
|
|
16
16
|
describe HelperExampleGroup, :type => :helper do
|
17
17
|
helper_name :explicit
|
18
18
|
|
19
|
+
accesses_configured_helper_methods
|
20
|
+
|
19
21
|
it "DEPRECATED should have direct access to methods defined in helpers" do
|
20
22
|
method_in_explicit_helper.should =~ /text from a method/
|
21
23
|
end
|
@@ -112,8 +114,6 @@ module Spec
|
|
112
114
|
ActionView::Helpers::TextHelper,
|
113
115
|
ActionView::Helpers::UrlHelper
|
114
116
|
]
|
115
|
-
helpers << ActionView::Helpers::PaginationHelper rescue nil #removed for 2.0
|
116
|
-
helpers << ActionView::Helpers::JavaScriptMacrosHelper rescue nil #removed for 2.0
|
117
117
|
helpers.each do |helper_module|
|
118
118
|
it "should include #{helper_module}" do
|
119
119
|
self.class.ancestors.should include(helper_module)
|
@@ -146,6 +146,12 @@ module Spec
|
|
146
146
|
|
147
147
|
describe HelperExampleGroup, "using a helper that uses output_buffer inside helper", :type => :helper do
|
148
148
|
helper_name :explicit
|
149
|
+
|
150
|
+
before(:each) do
|
151
|
+
if Rails::VERSION::STRING <= "2.1"
|
152
|
+
pending("need to get this new feature working against pre 2.2 versions of rails")
|
153
|
+
end
|
154
|
+
end
|
149
155
|
|
150
156
|
it "should not raise an error" do
|
151
157
|
lambda { method_using_output_buffer }.should_not raise_error
|
@@ -4,7 +4,9 @@ module Spec
|
|
4
4
|
module Rails
|
5
5
|
module Example
|
6
6
|
describe ModelExampleGroup do
|
7
|
-
|
7
|
+
accesses_configured_helper_methods
|
8
|
+
|
9
|
+
it "clears its name from the description" do
|
8
10
|
group = describe("foo", :type => :model) do
|
9
11
|
$nested_group = describe("bar") do
|
10
12
|
end
|
@@ -4,6 +4,8 @@ describe "A template with an implicit helper", :type => :view do
|
|
4
4
|
before(:each) do
|
5
5
|
render "view_spec/implicit_helper"
|
6
6
|
end
|
7
|
+
|
8
|
+
accesses_configured_helper_methods
|
7
9
|
|
8
10
|
it "should include the helper" do
|
9
11
|
response.should have_tag('div', :content => "This is text from a method in the ViewSpecHelper")
|
@@ -95,7 +97,7 @@ describe "A template that includes a partial", :type => :view do
|
|
95
97
|
template.verify_rendered
|
96
98
|
rescue Spec::Mocks::MockExpectationError => e
|
97
99
|
ensure
|
98
|
-
e.backtrace.find{|line| line =~ /
|
100
|
+
e.backtrace.find{|line| line =~ /#{__FILE__}\:#{__LINE__ - 6}/}.should_not be_nil
|
99
101
|
end
|
100
102
|
end
|
101
103
|
|
@@ -112,7 +114,7 @@ describe "A template that includes a partial", :type => :view do
|
|
112
114
|
template.verify_rendered
|
113
115
|
rescue Spec::Mocks::MockExpectationError => e
|
114
116
|
ensure
|
115
|
-
e.backtrace.find{|line| line =~ /
|
117
|
+
e.backtrace.find{|line| line =~ /#{__FILE__}\:#{__LINE__ - 6}/}.should_not be_nil
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
@@ -149,18 +151,16 @@ describe "A view that includes a partial using :collection and :spacer_template"
|
|
149
151
|
|
150
152
|
end
|
151
153
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
end
|
154
|
+
describe "A view that includes a partial using an array as partial_path", :type => :view do
|
155
|
+
before(:each) do
|
156
|
+
renderable_object = Object.new
|
157
|
+
renderable_object.stub!(:name).and_return("Renderable Object")
|
158
|
+
assigns[:array] = [renderable_object]
|
159
|
+
end
|
159
160
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
end
|
161
|
+
it "should render the array passed through to render_partial without modification" do
|
162
|
+
render "view_spec/template_with_partial_with_array"
|
163
|
+
response.body.should match(/^Renderable Object$/)
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
@@ -179,6 +179,18 @@ describe "A view", :type => :view do
|
|
179
179
|
render "view_spec/accessor"
|
180
180
|
end
|
181
181
|
|
182
|
+
it "should use the template as the implicit subject" do
|
183
|
+
subject.should == template
|
184
|
+
end
|
185
|
+
|
186
|
+
describe "with a specified subject" do
|
187
|
+
subject { 'specified' }
|
188
|
+
|
189
|
+
it "should use the specified subject" do
|
190
|
+
subject.should == 'specified'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
182
194
|
it "should have access to session data" do
|
183
195
|
response.should have_tag("div#session", "session")
|
184
196
|
end
|
@@ -270,6 +282,12 @@ describe "setting path parameters", :type => :view do
|
|
270
282
|
end
|
271
283
|
end
|
272
284
|
|
285
|
+
describe "route helpers", :type => :view do
|
286
|
+
it "should be available before render is called" do
|
287
|
+
custom_route_path.should == '/custom_route'
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
273
291
|
module Spec
|
274
292
|
module Rails
|
275
293
|
module Example
|
@@ -285,10 +303,10 @@ module Spec
|
|
285
303
|
|
286
304
|
it "should clear ActionView::Base.base_view_path on teardown" do
|
287
305
|
group = describe("base_view_path_cleared flag", :type => :view) {}
|
288
|
-
example = group.
|
306
|
+
example = group.new("example",{}) {}
|
289
307
|
|
290
308
|
ActionView::Base.should_receive(:base_view_path=).with(nil)
|
291
|
-
|
309
|
+
example.run_after_each
|
292
310
|
end
|
293
311
|
end
|
294
312
|
end
|
@@ -13,6 +13,16 @@ describe "be_valid" do
|
|
13
13
|
CanBeValid.new(false).should_not be_valid
|
14
14
|
end
|
15
15
|
|
16
|
+
describe CanBeValid do
|
17
|
+
subject { CanBeValid.new(true) }
|
18
|
+
it { subject.should be_valid }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe CanBeValid do
|
22
|
+
subject { CanBeValid.new(false) }
|
23
|
+
it { subject.should_not be_valid }
|
24
|
+
end
|
25
|
+
|
16
26
|
class CanHaveErrors
|
17
27
|
def initialize(errors)
|
18
28
|
@valid = !errors
|
@@ -786,6 +786,7 @@ describe "have_tag", :type => :controller do
|
|
786
786
|
end
|
787
787
|
|
788
788
|
describe 'selecting in HTML that contains a mock with null_object' do
|
789
|
+
include ActionController::Assertions::SelectorAssertions
|
789
790
|
module HTML
|
790
791
|
class Document
|
791
792
|
def initialize_with_strict_error_checking(text, strict=false, xml=false)
|
@@ -2,17 +2,25 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
2
2
|
|
3
3
|
describe "have_text" do
|
4
4
|
|
5
|
+
|
6
|
+
it "should have a helpful description" do
|
7
|
+
matcher = have_text("foo bar")
|
8
|
+
matcher.description.should == 'have text "foo bar"'
|
9
|
+
end
|
10
|
+
|
5
11
|
describe "where target is a Regexp" do
|
6
12
|
it 'should should match submitted text using a regexp' do
|
7
|
-
|
8
|
-
|
13
|
+
matcher = have_text(/fo*/)
|
14
|
+
matcher.matches?('foo').should be_true
|
15
|
+
matcher.matches?('bar').should be_nil
|
9
16
|
end
|
10
17
|
end
|
11
18
|
|
12
19
|
describe "where target is a String" do
|
13
20
|
it 'should match submitted text using a string' do
|
14
|
-
|
15
|
-
|
21
|
+
matcher = have_text('foo')
|
22
|
+
matcher.matches?('foo').should be_true
|
23
|
+
matcher.matches?('foo bar').should be_false
|
16
24
|
end
|
17
25
|
end
|
18
26
|
|
@@ -2,21 +2,19 @@ require File.dirname(__FILE__) + '/../../../spec_helper'
|
|
2
2
|
|
3
3
|
describe "include_text" do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
5
|
+
it "should have a helpful description" do
|
6
|
+
matcher = include_text("foo bar")
|
7
|
+
matcher.description.should == 'include text "foo bar"'
|
8
|
+
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
it 'should match if the text is contained' do
|
11
|
+
matcher = include_text('big piece')
|
12
|
+
matcher.matches?('I am a big piece of text').should be_true
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
15
|
+
it 'should not match if text is not contained' do
|
16
|
+
matcher = include_text('foo bar')
|
17
|
+
matcher.matches?('hello world').should be_false
|
20
18
|
end
|
21
19
|
|
22
20
|
end
|