1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
= Upgrade to 1.2.8 (in git)
== What's new
=== route_to and be_routable matchers
Stop using route_for and params_from today! These new matchers from Randy
Harmon are more expressive and more reliable. Here's how you use them:
{ :put => "/projects/37" }.should route_to(:controller => 'projects', :action => 'update', :id => '37')
{ :get => "/nonexisting_route" }.should_not be_routable
== What's changed
=== spec_server has been removed
spec_server was deprecated in 1.2.7 and has now been removed. Admittedly, this
was a short deprecation cycle, but spec server never quite worked right in all
situations and spork is a great solution that you can use today! This is all
you need to do:
[sudo] gem install spork
cd path/to/project
spork --bootsrap
Now open up spec/spec_helper.rb and follow the directions at the top. You'll
be up and running in no time.
For more info:
* http://github.com/timcharper/spork
* http://groups.google.com/group/sporkgem
= Upgrade to 1.2.7
== What's changed
=== spec_server is deprecated
spec_server is deprecated in favor of Tim Harper's new spork library
(http://github.com/timcharper/spork). Get it. Use it. Love it.
gem install spork
= Upgrade to 1.2.0-1.2.6
== What's changed
=== Supported Rails Versions
This release supports the following versions of rails:
* 2.0.5
* 2.1.2
* 2.2.2
* 2.3.2
=== update generated files
Be sure to run "script/generate rspec" and allow the following files to be overwritten:
* lib/tasks/rspec.rake
* script/spec
* script/spec_server
=== controller.use_rails_error_handling! is deprecated
Use <tt>rescue_action_in_public!</tt> instead. It comes directly from rails and does
exactly the same thing
=== route_for
After a change to edge rails broke our monkey-patched <tt>route_for</tt> method, I
decided to just delegate to rails' <tt>assert_generates</tt> method. For most cases,
this will not present a problem, but for some it might. You'll know if you
upgrade and see any newly failing, route-related examples. Here are the things
that you might need to change.
==== Make sure IDs are strings
If you had :id => 1 before, you need to change that to :id => "1"
#old
route_for(:controller => 'things', :action => 'show', :id => 1).should == "/things/1"
#new
route_for(:controller => 'things', :action => 'show', :id => "1").should == "/things/1"
==== Convert paths for non-get methods to hashes
If you had an example with a route that requires post, put, or delete, you'll
need to declare that explicitly.
#old
route_for(:controller => 'things', :action => 'create').should == "/things"
#new
route_for(:controller => 'things', :action => 'create').should == {:path => "/things", :method => :post}
=== Controller/template isolation
Even though controller specs do not render views by default (use
<tt>integrate_views</tt> to get them to render views), the way this works has
changed in this version.
It used to be that the view template need not even exist, but due to changes
in rails it became much more difficult to manage that for all the different
versions of rails that rspec-rails supports. So now the template must exist,
but it still won't be rendered unless you declare <tt>integrate_views</tt>.
== What's new
=== render no longer requires a path
The <tt>render()</tt> method in view specs will infer the path from the
first argument passed to <tt>describe()</tt>.
describe "players/show" do
it "does something" do
render
response.should have_tag("....")
end
end
=== routing specs live in spec/routing
<tt>script/generate rspec_scaffold</tt> now generates its routing spec in
<tt>spec/routing/</tt>.
=== bypass_rescue
Added a new <tt>bypass_rescue()</tt> declaration for controller specs. Use this
when you want to specify that an error is raised by an action, even if that
error is later captured by a <tt>rescue_from()</tt> declaration.
describe AccountController do
describe "GET @account" do
context "requested by anonymous user" do
it "denies access" do
bypass_rescue
lambda do
get :show, :id => "37"
end.should raise_error(AccessDenied)
end
end
end
end
|