rspec-rails 2.8.0.rc2 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -100,21 +100,59 @@ See http://github.com/rspec/rspec-rails/issues
100
100
 
101
101
  # Request Specs
102
102
 
103
- Request specs live in spec/requests.
103
+ Request specs live in spec/requests, and mix in behavior
104
+ [ActionDispatch::Integration::Runner](http://api.rubyonrails.org/classes/ActionDispatch/Integration/Runner.html),
105
+ which is the basis for [Rails' integration
106
+ tests](http://guides.rubyonrails.org/testing.html#integration-testing). The
107
+ intent is to specify one or more request/response cycles from end to end using
108
+ a black box approach.
104
109
 
105
110
  ```ruby
106
- describe "widgets resource" do
107
- describe "GET index" do
108
- it "contains the widgets header" do
109
- get "/widgets/index"
110
- response.should have_selector("h1", :content => "Widgets")
111
+ describe "home page" do
112
+ it "diplays the user's username after successful login" do
113
+ user = User.create!(:username => "jdoe", :password => "secret")
114
+ get "/login"
115
+ assert_select "form.login" do
116
+ assert_select "input[name=?]", "username"
117
+ assert_select "input[name=?]", "password"
118
+ assert_select "input[type=?]", "submit"
111
119
  end
120
+
121
+ post "/login", :username => "jdoe", :password => "secret"
122
+ assert_select ".header .username", :text => "jdoe"
123
+ end
124
+ end
125
+ ```
126
+
127
+ This example uses only standard Rails and RSpec API's, but many RSpec/Rails
128
+ users like to use extension libraries like FactoryGirl and Capybara:
129
+
130
+ ```ruby
131
+ describe "home page" do
132
+ it "diplays the user's username after successful login" do
133
+ user = Factory(:user, :username => "jdoe", :password => "secret")
134
+ visit "/login"
135
+ fill_in "Username", :with => "jdoe"
136
+ fill_in "Password", :with => "secret"
137
+ click_buton "Log in"
138
+
139
+ page.should have_selector(".header .username", :content => "jdoe")
112
140
  end
113
141
  end
114
142
  ```
115
143
 
116
- Request specs mix in behavior from Rails' integration tests. See the
117
- docs for ActionDispatch::Integration::Runner for more information.
144
+ FactoryGirl decouples this example from changes to validation requirements,
145
+ which can be encoded into the underlying factory definition without requiring
146
+ changes to this example.
147
+
148
+ Among other benefits, Capybara binds the form post to the generated HTML, which
149
+ means we don't need to specify them separately.
150
+
151
+ There are several other Ruby libs that implement the factory pattern or provide
152
+ a DSL for request specs (a.k.a. acceptance or integration specs), but
153
+ FactoryGirl and Capybara seem to be the most widely used. Whether you choose
154
+ these or other libs, we strongly recommend using something for each of these
155
+ roles.
118
156
 
119
157
  # Controller Specs
120
158
 
@@ -150,3 +150,181 @@ Feature: anonymous controller
150
150
  """
151
151
  When I run `rspec spec`
152
152
  Then the examples should all pass
153
+
154
+ Scenario: anonymous controllers only create resource routes
155
+ Given a file named "spec/controllers/application_controller_spec.rb" with:
156
+ """
157
+ require "spec_helper"
158
+
159
+ describe ApplicationController do
160
+ controller do
161
+ def index
162
+ render :text => "index called"
163
+ end
164
+
165
+ def create
166
+ render :text => "create called"
167
+ end
168
+
169
+ def new
170
+ render :text => "new called"
171
+ end
172
+
173
+ def show
174
+ render :text => "show called"
175
+ end
176
+
177
+ def edit
178
+ render :text => "edit called"
179
+ end
180
+
181
+ def update
182
+ render :text => "update called"
183
+ end
184
+
185
+ def destroy
186
+ render :text => "destroy called"
187
+ end
188
+
189
+ def willerror
190
+ render :text => "will not render"
191
+ end
192
+ end
193
+
194
+ describe "#index" do
195
+ it "responds to GET" do
196
+ get :index
197
+ response.body.should == "index called"
198
+ end
199
+
200
+ it "also responds to POST" do
201
+ post :index
202
+ response.body.should == "index called"
203
+ end
204
+
205
+ it "also responds to PUT" do
206
+ put :index
207
+ response.body.should == "index called"
208
+ end
209
+
210
+ it "also responds to DELETE" do
211
+ delete :index
212
+ response.body.should == "index called"
213
+ end
214
+ end
215
+
216
+ describe "#create" do
217
+ it "responds to POST" do
218
+ post :create
219
+ response.body.should == "create called"
220
+ end
221
+
222
+ # And the rest...
223
+ %w{get post put delete}.each do |calltype|
224
+ it "responds to #{calltype}" do
225
+ send(calltype, :create)
226
+ response.body.should == "create called"
227
+ end
228
+ end
229
+ end
230
+
231
+ describe "#new" do
232
+ it "responds to GET" do
233
+ get :new
234
+ response.body.should == "new called"
235
+ end
236
+
237
+ # And the rest...
238
+ %w{get post put delete}.each do |calltype|
239
+ it "responds to #{calltype}" do
240
+ send(calltype, :new)
241
+ response.body.should == "new called"
242
+ end
243
+ end
244
+ end
245
+
246
+ describe "#edit" do
247
+ it "responds to GET" do
248
+ get :edit, :id => "anyid"
249
+ response.body.should == "edit called"
250
+ end
251
+
252
+ it "requires the :id parameter" do
253
+ expect { get :edit }.to raise_error(ActionController::RoutingError)
254
+ end
255
+
256
+ # And the rest...
257
+ %w{get post put delete}.each do |calltype|
258
+ it "responds to #{calltype}" do
259
+ send(calltype, :edit, {:id => "anyid"})
260
+ response.body.should == "edit called"
261
+ end
262
+ end
263
+ end
264
+
265
+ describe "#show" do
266
+ it "responds to GET" do
267
+ get :show, :id => "anyid"
268
+ response.body.should == "show called"
269
+ end
270
+
271
+ it "requires the :id parameter" do
272
+ expect { get :show }.to raise_error(ActionController::RoutingError)
273
+ end
274
+
275
+ # And the rest...
276
+ %w{get post put delete}.each do |calltype|
277
+ it "responds to #{calltype}" do
278
+ send(calltype, :show, {:id => "anyid"})
279
+ response.body.should == "show called"
280
+ end
281
+ end
282
+ end
283
+
284
+ describe "#update" do
285
+ it "responds to PUT" do
286
+ put :update, :id => "anyid"
287
+ response.body.should == "update called"
288
+ end
289
+
290
+ it "requires the :id parameter" do
291
+ expect { put :update }.to raise_error(ActionController::RoutingError)
292
+ end
293
+
294
+ # And the rest...
295
+ %w{get post put delete}.each do |calltype|
296
+ it "responds to #{calltype}" do
297
+ send(calltype, :update, {:id => "anyid"})
298
+ response.body.should == "update called"
299
+ end
300
+ end
301
+ end
302
+
303
+ describe "#destroy" do
304
+ it "responds to DELETE" do
305
+ delete :destroy, :id => "anyid"
306
+ response.body.should == "destroy called"
307
+ end
308
+
309
+ it "requires the :id parameter" do
310
+ expect { delete :destroy }.to raise_error(ActionController::RoutingError)
311
+ end
312
+
313
+ # And the rest...
314
+ %w{get post put delete}.each do |calltype|
315
+ it "responds to #{calltype}" do
316
+ send(calltype, :destroy, {:id => "anyid"})
317
+ response.body.should == "destroy called"
318
+ end
319
+ end
320
+ end
321
+
322
+ describe "#willerror" do
323
+ it "cannot be called" do
324
+ expect { get :willerror }.to raise_error(ActionController::RoutingError)
325
+ end
326
+ end
327
+ end
328
+ """
329
+ When I run `rspec spec`
330
+ Then the examples should all pass
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
- describe "<%= ns_table_name %>/edit.html.<%= options[:template_engine] %>" do
4
+ describe "<%= ns_table_name %>/edit" do
5
5
  before(:each) do
6
6
  @<%= ns_file_name %> = assign(:<%= ns_file_name %>, stub_model(<%= class_name %><%= output_attributes.empty? ? '))' : ',' %>
7
7
  <% output_attributes.each_with_index do |attribute, attribute_index| -%>
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
- describe "<%= ns_table_name %>/index.html.<%= options[:template_engine] %>" do
4
+ describe "<%= ns_table_name %>/index" do
5
5
  before(:each) do
6
6
  assign(:<%= table_name %>, [
7
7
  <% [1,2].each_with_index do |id, model_index| -%>
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
- describe "<%= ns_table_name %>/new.html.<%= options[:template_engine] %>" do
4
+ describe "<%= ns_table_name %>/new" do
5
5
  before(:each) do
6
6
  assign(:<%= ns_file_name %>, stub_model(<%= class_name %><%= output_attributes.empty? ? ').as_new_record)' : ',' %>
7
7
  <% output_attributes.each_with_index do |attribute, attribute_index| -%>
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
- describe "<%= ns_table_name %>/show.html.<%= options[:template_engine] %>" do
4
+ describe "<%= ns_table_name %>/show" do
5
5
  before(:each) do
6
6
  @<%= ns_file_name %> = assign(:<%= ns_file_name %>, stub_model(<%= class_name %><%= output_attributes.empty? ? '))' : ',' %>
7
7
  <% output_attributes.each_with_index do |attribute, attribute_index| -%>
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "<%= file_path %>/<%= @action %>.html.<%= options[:template_engine] %>" do
3
+ describe "<%= file_path %>/<%= @action %>" do
4
4
  pending "add some examples to (or delete) #{__FILE__}"
5
5
  end
@@ -10,7 +10,7 @@ module RSpec::Rails
10
10
 
11
11
  module ClassMethods
12
12
  def _default_helper
13
- base = metadata[:example_group][:description].split('/').first
13
+ base = metadata[:example_group][:description].split('/')[0..-2].join('/')
14
14
  (base.camelize + 'Helper').constantize if base
15
15
  rescue NameError
16
16
  nil
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Rails
3
3
  module Version
4
- STRING = '2.8.0.rc2'
4
+ STRING = '2.8.0'
5
5
  end
6
6
  end
7
7
  end
@@ -35,7 +35,7 @@ describe Rspec::Generators::ScaffoldGenerator do
35
35
  subject { file("spec/views/posts/edit.html.erb_spec.rb") }
36
36
  it { should exist }
37
37
  it { should contain /require 'spec_helper'/ }
38
- it { should contain /describe "(.*)\/edit.html.erb"/ }
38
+ it { should contain /describe "(.*)\/edit"/ }
39
39
  it { should contain /it "renders the edit (.*) form"/ }
40
40
  end
41
41
 
@@ -43,7 +43,7 @@ describe Rspec::Generators::ScaffoldGenerator do
43
43
  subject { file("spec/views/posts/index.html.erb_spec.rb") }
44
44
  it { should exist }
45
45
  it { should contain /require 'spec_helper'/ }
46
- it { should contain /describe "(.*)\/index.html.erb"/ }
46
+ it { should contain /describe "(.*)\/index"/ }
47
47
  it { should contain /it "renders a list of (.*)"/ }
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ describe Rspec::Generators::ScaffoldGenerator do
51
51
  subject { file("spec/views/posts/new.html.erb_spec.rb") }
52
52
  it { should exist }
53
53
  it { should contain /require 'spec_helper'/ }
54
- it { should contain /describe "(.*)\/new.html.erb"/ }
54
+ it { should contain /describe "(.*)\/new"/ }
55
55
  it { should contain /it "renders new (.*) form"/ }
56
56
  end
57
57
 
@@ -59,7 +59,7 @@ describe Rspec::Generators::ScaffoldGenerator do
59
59
  subject { file("spec/views/posts/show.html.erb_spec.rb") }
60
60
  it { should exist }
61
61
  it { should contain /require 'spec_helper'/ }
62
- it { should contain /describe "(.*)\/show.html.erb"/ }
62
+ it { should contain /describe "(.*)\/show"/ }
63
63
  it { should contain /it "renders attributes in <p>"/ }
64
64
  end
65
65
  end
@@ -14,7 +14,7 @@ describe Rspec::Generators::ViewGenerator do
14
14
  run_generator %w(posts index)
15
15
  file('spec/views/posts/index.html.erb_spec.rb').tap do |f|
16
16
  f.should contain /require 'spec_helper'/
17
- f.should contain /describe "posts\/index.html.erb"/
17
+ f.should contain /describe "posts\/index"/
18
18
  end
19
19
  end
20
20
 
@@ -23,18 +23,18 @@ describe Rspec::Generators::ViewGenerator do
23
23
  run_generator %w(admin/posts index)
24
24
  file('spec/views/admin/posts/index.html.erb_spec.rb').tap do |f|
25
25
  f.should contain /require 'spec_helper'/
26
- f.should contain /describe "admin\/posts\/index.html.erb"/
26
+ f.should contain /describe "admin\/posts\/index"/
27
27
  end
28
28
  end
29
29
  end
30
30
  end
31
31
 
32
- describe 'haml' do
32
+ describe 'with a specified template engine' do
33
33
  it 'generates a spec for the supplied action' do
34
34
  run_generator %w(posts index --template_engine haml)
35
35
  file('spec/views/posts/index.html.haml_spec.rb').tap do |f|
36
36
  f.should contain /require 'spec_helper'/
37
- f.should contain /describe "posts\/index.html.haml"/
37
+ f.should contain /describe "posts\/index"/
38
38
  end
39
39
  end
40
40
  end
@@ -14,6 +14,7 @@ module RSpec::Rails
14
14
 
15
15
  describe 'automatic inclusion of helpers' do
16
16
  module ::ThingsHelper; end
17
+ module ::Namespaced; module ThingsHelper; end; end
17
18
 
18
19
  it 'includes the helper with the same name' do
19
20
  group = RSpec::Core::ExampleGroup.describe 'things/show.html.erb'
@@ -23,6 +24,14 @@ module RSpec::Rails
23
24
  end
24
25
  end
25
26
 
27
+ it 'includes the namespaced helper with the same name' do
28
+ group = RSpec::Core::ExampleGroup.describe 'namespaced/things/show.html.erb'
29
+ group.should_receive(:helper).with(Namespaced::ThingsHelper)
30
+ group.class_eval do
31
+ include ViewExampleGroup
32
+ end
33
+ end
34
+
26
35
  it 'operates normally when no helper with the same name exists' do
27
36
  raise 'unexpected constant found' if Object.const_defined?('ClocksHelper')
28
37
  lambda {
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424209
5
- prerelease: 6
4
+ hash: 47
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 8
9
9
  - 0
10
- - rc
11
- - 2
12
- version: 2.8.0.rc2
10
+ version: 2.8.0
13
11
  platform: ruby
14
12
  authors:
15
13
  - David Chelimsky
@@ -17,13 +15,13 @@ autorequire:
17
15
  bindir: bin
18
16
  cert_chain: []
19
17
 
20
- date: 2011-12-20 00:00:00 Z
18
+ date: 2012-01-05 00:00:00 Z
21
19
  dependencies:
22
20
  - !ruby/object:Gem::Dependency
23
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
- - - ~>
24
+ - - ">="
27
25
  - !ruby/object:Gem::Version
28
26
  hash: 7
29
27
  segments:
@@ -38,7 +36,7 @@ dependencies:
38
36
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
37
  none: false
40
38
  requirements:
41
- - - ~>
39
+ - - ">="
42
40
  - !ruby/object:Gem::Version
43
41
  hash: 7
44
42
  segments:
@@ -53,7 +51,7 @@ dependencies:
53
51
  version_requirements: &id003 !ruby/object:Gem::Requirement
54
52
  none: false
55
53
  requirements:
56
- - - ~>
54
+ - - ">="
57
55
  - !ruby/object:Gem::Version
58
56
  hash: 7
59
57
  segments:
@@ -68,21 +66,19 @@ dependencies:
68
66
  version_requirements: &id004 !ruby/object:Gem::Requirement
69
67
  none: false
70
68
  requirements:
71
- - - "="
69
+ - - ~>
72
70
  - !ruby/object:Gem::Version
73
- hash: 15424209
71
+ hash: 47
74
72
  segments:
75
73
  - 2
76
74
  - 8
77
75
  - 0
78
- - rc
79
- - 2
80
- version: 2.8.0.rc2
76
+ version: 2.8.0
81
77
  prerelease: false
82
78
  requirement: *id004
83
79
  name: rspec
84
80
  type: :runtime
85
- description: RSpec-2 for Rails-3
81
+ description: RSpec for Rails
86
82
  email: rspec-users@rubyforge.org
87
83
  executables: []
88
84
 
@@ -249,21 +245,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
249
245
  required_rubygems_version: !ruby/object:Gem::Requirement
250
246
  none: false
251
247
  requirements:
252
- - - ">"
248
+ - - ">="
253
249
  - !ruby/object:Gem::Version
254
- hash: 25
250
+ hash: 3
255
251
  segments:
256
- - 1
257
- - 3
258
- - 1
259
- version: 1.3.1
252
+ - 0
253
+ version: "0"
260
254
  requirements: []
261
255
 
262
256
  rubyforge_project: rspec
263
257
  rubygems_version: 1.8.11
264
258
  signing_key:
265
259
  specification_version: 3
266
- summary: rspec-rails-2.8.0.rc2
260
+ summary: rspec-rails-2.8.0
267
261
  test_files:
268
262
  - features/Autotest.md
269
263
  - features/Generators.md