This release supports the following versions of rails:
-
2.0.5
-
2.1.2
-
2.2.2
-
2.3.2
Be sure to run “script/generate rspec” and allow the following files to be overwritten:
-
lib/tasks/rspec.rake
-
script/spec
-
script/spec_server
Use rescue_action_in_public!
instead. It comes directly from rails and does exactly the same thing
After a change to edge rails broke our monkey-patched route_for
method, I decided to just delegate to rails’ assert_generates
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.
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"
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}
Even though controller specs do not render views by default (use integrate_views
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 integrate_views
.
The render()
method in view specs will infer the path from the first argument passed to describe()
.
describe "players/show" do it "does something" do render response.should have_tag("....") end end
script/generate rspec_scaffold
now generates its routing spec in spec/routing/
.
Added a new bypass_rescue()
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 rescue_from()
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